WPF TreeView清除选择

Luk*_*uke 9 .net wpf treeview

如何在WPF TreeView中清除TreeView选项?我已经尝试循环TreeNodes并清除IsSelected属性,但这是一个ReadOnly属性.有任何想法吗?

TreeView是使用XML通过绑定XMLDataProvider对象.

小智 11

我遇到了完全相同的问题并编写了以下代码,这些代码可以在任何树视图上工作,只需要对第一个函数进行一行调用.

class TomWrightsUtils
{
    public static void ClearTreeViewSelection(TreeView tv)
    {
        if (tv != null)
            ClearTreeViewItemsControlSelection(tv.Items, tv.ItemContainerGenerator);
    }
    private static void ClearTreeViewItemsControlSelection(ItemCollection ic, ItemContainerGenerator icg)
    {
        if ((ic != null) && (icg != null))
            for (int i = 0; i < ic.Count; i++)
            {
                TreeViewItem tvi = icg.ContainerFromIndex(i) as TreeViewItem;
                if (tvi != null)
                {
                    ClearTreeViewItemsControlSelection(tvi.Items, tvi.ItemContainerGenerator);
                    tvi.IsSelected = false;
                }
            }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ken*_*art 8

不确定TreeNodes是什么意思.

通常IsSelected,您的视图模型上会有一个与视图绑定的对应属性:

<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)

因此,您只需遍历视图模型中的数据项并进行设置即可IsSelected = false.

但是,听起来你没有这样的财产.在这种情况下,您需要TreeViewItem为每个数据项获取相应的数据.有关TreeView.ItemContainerGenerator如何执行此操作的信息,请参阅酒店.就像是:

var treeViewItem = _treeView.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem;
treeViewItem.IsSelected = false;
Run Code Online (Sandbox Code Playgroud)


小智 5

TreeViewItem tvi = tvMain.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem;

if (tvi != null) { tvi.IsSelected = true; tvi.IsSelected = false; }
Run Code Online (Sandbox Code Playgroud)