Question

I'm working on a TreeView and i have some childs into it.

The problem is that when I select a child with a width superior than the TreeView, the scroll automaticaly moves to show all the selected item, i want to disable this behavior!

I've already tried to handle the RequestBringIntoView event but it doesnt seems to work!

Thanks 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 the code-behing CS:

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;
    }
  }
}
Was it helpful?

Solution

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

You'll need to use an event setter to do this for databound items like below.

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

or like below for your xaml defined example

<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 as below

private void Null_Handler(object sender, RoutedEventArgs e)
{
    e.Handled = true;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top