我有一个带有树视图和文本框的应用程序:
<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 问题的一个示例,我确实希望在某些条件下将项目显示在视图中。