【问题标题】:TreeView Issue with expanding non-selected item扩展非选定项目的 TreeView 问题
【发布时间】:2013-07-06 04:54:27
【问题描述】:

我有一个带有树视图和文本框的应用程序:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="550" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <TreeView Width="500" Height="500" Name="TestTreeView">

        </TreeView>
        <TextBox Grid.Row="1"></TextBox>
    </Grid>
</Window>

在应用程序的构造函数中,我生成了 1000 个项目,每个项目都有 1 个子项目并将其添加到 TreeView:

public MainWindow()
{
    InitializeComponent();

    for (int i = 0; i < 1000; i++)
    {
        TreeViewItem item = new TreeViewItem();
        item.Header = "Hey there " + i.ToString();
        TreeViewItem subItem = new TreeViewItem();
        subItem.Header = "Hi there";
        item.Items.Add(subItem);
        TestTreeView.Items.Add(item);
    }
}

在我的场景中,我选择 TreeView 的第二项,然后单击 TextBox 以将焦点从 TreeView 移开。然后我用鼠标向下滚动 TreeView,将所选项目带出视口。然后我展开另一个项目而不选择它。我的预期结果是我的滚动保持在其当前位置,但是它会将所选项目滚动回视图,导致我丢失了我正在展开的项目。

如果 TreeView 已经拥有焦点,则不会发生这种情况。如果我要选择一个项目,然后向下滚动并展开另一个项目,则不会发生这种跳回所选项目的行为。

这是正常行为吗?例如,如果我在 Visual Studio 的解决方案资源管理器中执行这些相同的选择步骤,我不会得到这种行为。有没有办法告诉它不要像这样滚动回选定的项目?

我知道我可以简单地将 RequestBringIntoView 的 e.Handled 设置为 true,但是我提供的示例只是对我的问题的简单解释。这是我在一个更大的应用程序中使用的 TreeView 问题的一个示例,我确实希望在某些条件下将项目显示在视图中。

【问题讨论】:

  • 我刚刚在 VS 2012 中尝试过,它的行为与您描述的一样。如果我正在重命名一个文件,它会跳回到之前选择的项目。如果我不编辑文件名,则滚动不变。
  • 您是否尝试过向 TreeView 添加事件/行为,例如 TreeViewItem.RequestBringIntoView 或 TreeViewItem.Expanded 并根据您选择的标准选择新项目或允许它转到上一个项目?

标签: wpf scroll treeview expand treeviewitem


【解决方案1】:

这个问题与称为 FocusScope 的逻辑范围概念有关。

您想要的是将 TreeView 的 IsFocusScope 设置为 true:

<TreeView Width="500" Height="500" Name="TestTreeView" FocusManager.IsFocusScope="true">
</TreeView>

这是一篇关于它的文章http://www.codeproject.com/Articles/38507/Using-the-WPF-FocusScope

这是 .net 4.5 文档:http://msdn.microsoft.com/en-us/library/aa969768.aspx 因为它比我能更好地解释它,并且可能比 codeproject 文章更最新

【讨论】:

  • 这绝对有效,但请记住,设置 FocusScope 可能会对 WPF 命令等需要注意的事情产生其他后果。
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多