Mam aplikacji z katalogów i pola tekstowego:TreeView Problem z rozszerza non-wybrany element
<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>
w konstruktorze dla aplikacji wygenerować 1000 elementów, każdy z 1 podpunktu i dodać go do 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);
}
}
W moim scenariuszu I wybrać drugą pozycję w TreeView, a następnie kliknij w polu tekstowym do podjęcia skupić od TreeView. Następnie przewijam w dół TreeView za pomocą myszki, usuwając wybrany element z okna podglądu. Następnie rozwijam inny element bez jego zaznaczania. Moim oczekiwanym rezultatem jest to, że mój scroll pozostaje w aktualnej pozycji, ale zamiast tego przewija wybrany przedmiot z powrotem do widoku, powodując utratę powiększanego przedmiotu.
Nie występuje, jeśli TreeView ma już fokus. Gdybym miał wybrać przedmiot, a następnie przewinąć w dół i rozwinąć kolejną pozycję, to takie zachowanie powrotu do wybranego elementu nie nastąpi.
Czy to normalne zachowanie? Jeśli wykonam te same kroki wyboru w eksploratorze rozwiązań Visual Studio, na przykład, nie otrzymam tego rodzaju zachowania. Czy jest jakiś sposób, aby powiedzieć, aby nie przewijać z powrotem do wybranego elementu?
Rozumiem, że mogę po prostu ustawić wartość e.Handled w RequestBringIntoView na wartość true, jednak próbka, którą podaję, jest prostym wyjaśnieniem mojego problemu. Jest to przykład problemu z TreeView, którego używam w znacznie większej aplikacji, w której chcę, aby przedmiot był wyświetlany pod pewnymi warunkami.
Po prostu próbowałem go w VS 2012, i zachowuje się tak, jak opisujesz. Jeśli zmieniam nazwę pliku, nastąpi powrót do poprzednio wybranego elementu. Jeśli nie edytuję nazwy pliku, przewijanie pozostanie niezmienione. –
Czy próbowałeś dodawać zdarzenia/zachowania do swojego TreeView w przypadku czegoś takiego jak TreeViewItem.RequestBringIntoView lub TreeViewItem.Expanded i wybierając nowy element lub pozwalając mu przejść do poprzedniego elementu w zależności od wybranych kryteriów? – Vynos