在TreeView中取消选择并重新选择TreeViewItem

时间:2011-03-22 10:25:29

标签: wpf treeview unselect

我遇到了以下问题:

在我的TreeView中,当用户单击TreeView而不是TreeViewItem时,通过调用我自己的deselect()方法添加了取消选择功能。 这是我的TreeView方法:

public void deselectAll()
{
    TreeViewItem item = SelectedItem as TreeViewItem;
    if (item != null)
    {
        this.Focus();
        item.IsSelected = false;
    }
}

我的问题是,我取消选择后无法重新选择TreeViewItem。我已经读过,关注TreeView本身应该可以解决这个问题,但事实并非如此。如果我在'IsSelected = false'之前或之后放置'Focus()'也没关系。

有谁知道为什么这不起作用?任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:3)

设置item.IsSelected = false后;你必须为你的树视图调用.Focus()。

        <TreeView MouseLeftButtonDown="TreeView_MouseLeftButtonDown">
            <TreeViewItem Header="Employee1">
                <TreeViewItem Header="Jesper"/>
                <TreeViewItem Header="Aaberg"/>
                <TreeViewItem Header="12345"/>
            </TreeViewItem>
            <TreeViewItem Header="Employee2">
                <TreeViewItem Header="Dominik"/>
                <TreeViewItem Header="Paiha"/>
                <TreeViewItem Header="98765"/>
            </TreeViewItem>
        </TreeView>

    private void TreeView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var tv = sender as TreeView;

        if (tv != null)
        {
            var item = (TreeViewItem)tv.SelectedItem;
            item.IsSelected = false;
            tv.Focus();
        }
    }

你写了焦点()不解决你的问题。你在哪里称之为deselectAll()?

作为一种解决方法,您可以使用MouseLeftDown将项目设置为选中。

ps:别忘了将答案标记为anwser。