我有一个TreeView
控件,所有节点都是从xml填充的。树在第一级有5个元素,每个元素包含2级中的几个元素。在我的应用程序启动时,我的reQirmrnt只是第一个元素应该是Expanded
。我写了这样的方法:
public void SelectAndExpand(ItemsControl ParentContainer)
{
TreeViewItem CurrentContainer = (TreeViewItem)ParentContainer.ItemContainerGenerator.ContainerFromIndex(0);
if (CurrentContainer == null)
{
return;
}
CurrentContainer.IsExpanded = true;
CurrentContainer.UpdateLayout();
TreeViewItem ChildItem = (TreeViewItem)CurrentContainer.ItemContainerGenerator.ContainerFromIndex(0);
if (ChildItem != null)
{
ChildItem.IsSelected = true;
CurrentContainer.UpdateLayout();
}
}
我这样称呼这个方法:
public Window1()
{
InitializeComponent();
SelectAndExpand(MyTree);
}
但这不起作用......
任何克服此问题的建议
由于
答案 0 :(得分:1)
您可以定义ItemContainerStyle
以便扩展项目:
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
...
</TreeView>
答案 1 :(得分:1)
谢谢托马斯
我可以通过其他方式克服这个问题...
我将Loaded事件设置为
Loaded="MyTree_Loaded"
我handeld as
private void MyTree_Loaded(object sender, RoutedEventArgs e)
{
TreeViewItem CurrentContainer = (TreeViewItem)MyTree.ItemContainerGenerator.ContainerFromIndex(0);
if (CurrentContainer == null)
{
return;
}
CurrentContainer.IsExpanded = true;
CurrentContainer.UpdateLayout();
TreeViewItem ChildItem = (TreeViewItem)CurrentContainer.ItemContainerGenerator.ContainerFromIndex(0);
if (ChildItem != null)
{
ChildItem.IsSelected = true;
CurrentContainer.UpdateLayout();
}
}
由于
答案 2 :(得分:0)
另一种方法是遵循本文Simplifying the WPF TreeView by Using the ViewModel Pattern,并将xml加载到ViewModel类。
您可以直接在代码隐藏中设置IsExpanded属性,而无需与TreeView进行交互。