从TreeView中移除所选项

7
有没有一种简单的方法将 TreeView 的 SelectedItem 设置为 null 或等效项?此外,我需要在 C# 中完成这个操作而不是在 XAML 中。
最好的问候,
加布里埃尔

你到底想做什么?为什么需要将SelectedItem设置为空? - Azhar Khorasany
我认为他只是想清除选择,可能依赖于另一个字段的值,用户必须重新选择树视图节点,所以Karl给出了答案。 - Andreas H.
4个回答

9

当您使用TreeViewItem(s)显式构建TreeView时,所有以前的答案都将有所帮助。如果您需要在使用ItemsSource时清除选择的解决方案,请使用以下代码:

private static TreeViewItem FindTreeViewSelectedItemContainer(ItemsControl root, object selection)
{
    var item = root.ItemContainerGenerator.ContainerFromItem(selection) as TreeViewItem;
    if (item == null)
    {
        foreach (var subItem in root.Items)
        {
            item = FindTreeViewSelectedItemContainer((TreeViewItem)root.ItemContainerGenerator.ContainerFromItem(subItem), selection);
            if (item != null)
            {
                break;
            }
        }
    }

    return item;
}

// Example:
private void Button_Click(object sender, RoutedEventArgs e)
{
    if (TV.SelectedItem != null)
    {
        var container = FindTreeViewSelectedItemContainer(TV, TV.SelectedItem);
        if (container != null)
        {
            container.IsSelected = false;
        }
    }
}

8

我不确定你的意思。

如果你想移除该项,请使用以下方法:

treeView1.Items.Remove(treeView1.SelectedItem);

如果您想从树形视图中删除选择,请使用以下方法:
((TreeViewItem)treeView1.SelectedItem).IsSelected = false;

"SelectedItem" 是一个 "object",所以你需要进行类型转换。 - Ray
2
如果TreeView被数据绑定了,你会怎么做? - Marat Khasanov
当然,我没有考虑到您可以使用IsSelected属性来取消选择。我真是太傻了,您的回答非常好。像魔法一样有效,谢谢! - Gabriel
问题中没有任何暗示,所以我猜他是自己构建树视图 ;) - abc
尝试点击未选择的项目,你会惊讶的发现它被选中了。同时尝试切换到另一个窗口,然后再返回浏览器。这个“未选择”的项目变成了选中状态。 - EvAlex

3
您想要取消已选中的内容吗?
我认为您需要像这样的东西:
((TreeViewItem)tv.SelectedItem).IsSelected = false;

0

您想快速删除所有项目吗? 如果是这样,您可以使用

treeView1.Items.Clear();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接