1

我有以下问题:

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

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

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

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

4

1 回答 1

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();
        }
    }

你写的 focus() 不能解决你的问题。你在哪里调用你的 deselectAll()?

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

ps:不要忘记将答案标记为anwser。

于 2011-03-22T10:47:55.710 回答