如何防止WPF TreeView聚焦所选的TreeViewItem

4

我正在处理一个TreeView并且其中有一些子项。

问题在于,当我选择一个宽度大于TreeView的子项时,滚动条会自动移动以显示所有选定的项目,我想禁用此行为!

我已经尝试处理RequestBringIntoView事件,但似乎没有起作用!

谢谢您的帮助!

以下是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>

代码背后的计算机科学:

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;
    }
  }
}

2
优秀的长树形视图项目名称加1 - Dr. Andrew Burnett-Thompson
1个回答

4

您需要处理TreeViewItem上的RequestBringIntoView事件,而不是TreeView

对于数据绑定项,您需要使用事件设置器来完成以下操作。

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

或者像下面这样,针对您在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>

Null_Handler的定义如下:

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

1
不用谢,我为了一个项目而必须这样做,当我在寻找答案时,你的问题是我能找到的唯一相关的东西。 - NtscCobalt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接