Сокрытие и повторное отображение TreeView изменяет, какой TreeViewItem выбран. Зачем? - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть 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, кнопкой табуляции или нет ??

1 Ответ

0 голосов
/ 03 февраля 2012

провел тест с новым проектом и в виде дерева со списком строк.Никогда не терял выбранный предмет после свертывания и повторного отображения.

...