How can I prevent my WPF TreeView from focusing the selected TreeViewItem

I am working on a TreeView and I have some children.

The problem is that when selecting a child with a width greater than TreeView, the auto scroll moves to display the entire selected item, I want to disable this behavior!

I already tried to handle the RequestBringIntoView event, but it does not seem to work!

Thank you for your help!

Here is the XAML:

<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="350"> <Grid> <TreeView RequestBringIntoView="TreeView_RequestBringIntoView"> <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ"> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"> <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ"/> </TreeViewItem> </TreeViewItem> </TreeViewItem> </TreeViewItem> </TreeViewItem> </TreeViewItem> </TreeViewItem> </TreeViewItem> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> <TreeViewItem Header="TreeView Elem 1"/> </TreeView> </Grid> </Window> 

And CS code:

 using System.Windows; namespace WpfApplication2 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void TreeView_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e) { e.Handled = true; } } } 
+4
source share
1 answer

You need to handle the RequestBringIntoView event on the TreeViewItem , not on the TreeView .

You will need to use the event installer to do this for data items such as below.

 <TreeView> <TreeView.ItemContainerStyle> <Style TargetType="TreeViewItem"> <EventSetter Event="RequestBringIntoView" Handler="Null_Handler"/> </Style> </TreeView.ItemContainerStyle> </TreeView> 

or as below for your example defined in xaml

 <TreeView> <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ" RequestBringIntoView="Null_Handler"/> <TreeViewItem Header="TreeView Elem 1" RequestBringIntoView="Null_Handler"> </TreeView> 

Where Null_Handler is defined below

 private void Null_Handler(object sender, RoutedEventArgs e) { e.Handled = true; } 
+4
source

Source: https://habr.com/ru/post/1389234/


All Articles