以编程方式 select UWP TreeView 中的第一项
Programatically select first item in a UWP TreeView
如何以编程方式 select UWP 树视图中的 TreeViewItem?具体来说,我想 select 我树中的第一项。
我正在使用数据绑定。我知道我可以绑定 IsSelected
属性,但是,我绑定的对象没有这样的 属性 并且想避免编写包装器。
SelectedNodes
属性 也可以是 set
。
这意味着,这应该有效:
myTreeView.SelectedNodes = new List<TreeViewNode>{ myTreeView.RootNodes[0] };
如果你编辑TreView的样式,你会发现在它的ControlTemplate中,它实际上使用了一个TreeViewList控件。
<Style x:Key="TreeViewStyle1" TargetType="TreeView">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="CanDragItems" Value="True"/>
<Setter Property="CanReorderItems" Value="True"/>
<Setter Property="AllowDrop" Value="True"/>
<Setter Property="ItemContainerTransitions">
<Setter.Value>
<TransitionCollection>
<ContentThemeTransition/>
<ReorderThemeTransition/>
<EntranceThemeTransition IsStaggeringEnabled="False"/>
</TransitionCollection>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<TreeViewList x:Name="ListControl" AllowDrop="{TemplateBinding AllowDrop}" CanReorderItems="{TemplateBinding CanReorderItems}" CanDragItems="{TemplateBinding CanDragItems}" ItemContainerStyleSelector="{TemplateBinding ItemContainerStyleSelector}" ItemContainerStyle="{TemplateBinding ItemContainerStyle}" ItemTemplate="{TemplateBinding ItemTemplate}" ItemContainerTransitions="{TemplateBinding ItemContainerTransitions}" ItemTemplateSelector="{TemplateBinding ItemTemplateSelector}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
TreeViewList class 继承自 ListView
。 ListView 有 SelectedItem 属性.
因此,您可以制作一个继承 TreeView class 的自定义 TreeView 控件。然后,您可以通过调用其 GetTemplateChild()
方法找到 TreeViewList 控件。之后,您可以为其设置selectedItem。
请检查我的代码示例:
public class MyTreeView:TreeView
{
TreeViewList treeViewList;
public MyTreeView()
{
this.Loaded += MyTreeView_Loaded;
}
private void MyTreeView_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
if (treeViewList != null)
{
treeViewList.SelectedIndex = 0;
}
}
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
treeViewList = this.GetTemplateChild("ListControl") as TreeViewList;
}
}
但是通过这种方式,您只能为RootNodes设置selectedItem。如果要选择子节点,我还是觉得IsSelected
属性绑定比较好
如何以编程方式 select UWP 树视图中的 TreeViewItem?具体来说,我想 select 我树中的第一项。
我正在使用数据绑定。我知道我可以绑定 IsSelected
属性,但是,我绑定的对象没有这样的 属性 并且想避免编写包装器。
SelectedNodes
属性 也可以是 set
。
这意味着,这应该有效:
myTreeView.SelectedNodes = new List<TreeViewNode>{ myTreeView.RootNodes[0] };
如果你编辑TreView的样式,你会发现在它的ControlTemplate中,它实际上使用了一个TreeViewList控件。
<Style x:Key="TreeViewStyle1" TargetType="TreeView">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="CanDragItems" Value="True"/>
<Setter Property="CanReorderItems" Value="True"/>
<Setter Property="AllowDrop" Value="True"/>
<Setter Property="ItemContainerTransitions">
<Setter.Value>
<TransitionCollection>
<ContentThemeTransition/>
<ReorderThemeTransition/>
<EntranceThemeTransition IsStaggeringEnabled="False"/>
</TransitionCollection>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<TreeViewList x:Name="ListControl" AllowDrop="{TemplateBinding AllowDrop}" CanReorderItems="{TemplateBinding CanReorderItems}" CanDragItems="{TemplateBinding CanDragItems}" ItemContainerStyleSelector="{TemplateBinding ItemContainerStyleSelector}" ItemContainerStyle="{TemplateBinding ItemContainerStyle}" ItemTemplate="{TemplateBinding ItemTemplate}" ItemContainerTransitions="{TemplateBinding ItemContainerTransitions}" ItemTemplateSelector="{TemplateBinding ItemTemplateSelector}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
TreeViewList class 继承自 ListView
。 ListView 有 SelectedItem 属性.
因此,您可以制作一个继承 TreeView class 的自定义 TreeView 控件。然后,您可以通过调用其 GetTemplateChild()
方法找到 TreeViewList 控件。之后,您可以为其设置selectedItem。
请检查我的代码示例:
public class MyTreeView:TreeView
{
TreeViewList treeViewList;
public MyTreeView()
{
this.Loaded += MyTreeView_Loaded;
}
private void MyTreeView_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
if (treeViewList != null)
{
treeViewList.SelectedIndex = 0;
}
}
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
treeViewList = this.GetTemplateChild("ListControl") as TreeViewList;
}
}
但是通过这种方式,您只能为RootNodes设置selectedItem。如果要选择子节点,我还是觉得IsSelected
属性绑定比较好