如何在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)
不确定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)