У меня есть TreeView в SL4, который уже заполнен, и с выбранным определенным TreeViewItem.
Просто выполняю
treeview.Visibility=Visibility.Collapsed;
и затем
treeview.Visibility=Visibility.Visible;
какой TreeViewItem выбран.Зачем?Есть ли способ избежать этого?
РЕДАКТИРОВАТЬ 2012.02.04 03: 29
Я отследил проблему до ее корня.Это (для меня удивительный) вывод из того, что я нашел: если выполнены все следующие условия:
1) TreeView имеет два (или более) уровня глубины,
2) Я начинаю с расширения всех его узлов,
3) Я начинаю выбирать узел на втором уровне, и
4) (это самый странный) кнопка, которую я использую, чтобы свернуть и показать снова, TreeView НЕ является табуляцией ,
, тогда TreeView НЕ сохраняет свой выбор после свертывания и повторного показа !!!
Пожалуйста, скачайте небольшой пример решения +, который воспроизводит проблему из http://src041.bluemosfet.net/treeviewselectsanotheritem.zip и попробуйте его.
или посмотрите на эти две части кода:
<UserControl x:Class="PRJ.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" Loaded="UserControl_Loaded">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Name="sp1">
<!-- ################################################################### -->
<!-- First, in the TreeView, expand TreeViewItems "a0", "a1" and "a2". -->
<!-- Then, select "a0b0". -->
<!-- Then, click the button twice. -->
<!-- If you don't remove IsTabStop="False" from the following line of code, the TreeView reappears with "a1" selected !!! -->
<!-- If you continue clicking the button, the selection shifts to "a1b0", "a2", and finally "a2b0". -->
<!-- If you remove IsTabStop="False" , or change it to True, the TreeView works OK and keeps its selection. -->
<!-- Isn't it odd, that the capability of the TreeView to keep its selection depends on whether the button used to hide and show the TreeView is a tab stop or not??? -->
<Button Content="Hide/Show TreeView" Name="b1" Click="b1_Click" IsTabStop="False" />
<!-- ################################################################### -->
<sdk:TreeView Name="tv1" />
</StackPanel>
</Grid>
</UserControl>
и
namespace PRJ
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void b1_Click(object sender, RoutedEventArgs e)
{
if (tv1.Visibility==Visibility.Collapsed)
tv1.Visibility=Visibility.Visible;
else
tv1.Visibility=Visibility.Collapsed;
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
for (int a=0;a<3;a++)
{
TreeViewItem tvia =new TreeViewItem();
tvia.Header =String.Format("a{0}",a);
for (int b=0;b<2;b++)
{
TreeViewItem tvib =new TreeViewItem();
tvib.Header =String.Format("a{0}b{1}",a,b);
tvia.Items.Add(tvib);
} // for b
tv1.Items.Add(tvia);
} // for a
}
}
}
Не странно ли, что способность TreeView сохранять свой выбор или нет зависит от того, является ли кнопка, используемая для скрытия и отображения TreeView, кнопкой табуляции или нет ??