У меня есть приложение с TreeView и текстовым полем:TreeView Проблемы с расширением невыбранной пункта
<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>
В конструкторе для приложения I генерировать 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, я не получаю такого поведения. Есть ли способ сказать ему не прокручивать назад к выбранному элементу, как это?
Я понимаю, что я могу просто установить e.Handled из RequestBringIntoView в true, однако образец, который я даю, просто объясняет мою проблему. Это пример проблемы с TreeView, которую я использую в гораздо большем приложении, где я хочу, чтобы элемент был введен в поле зрения при определенных условиях.
Я просто попробовал это в VS 2012, и он ведет себя так, как вы описываете. Если я переименую файл, он вернется к ранее выбранному элементу. Если я не редактирую имя файла, свиток не изменяется. –
Вы пытались добавить события/поведение в TreeView для чего-то вроде TreeViewItem.RequestBringIntoView или TreeViewItem.Expanded и либо выбрать новый элемент, либо позволить ему перейти к предыдущему элементу в зависимости от того, какие критерии вы выбрали? – Vynos