以编程方式在UWP TreeView中选择第一项

时间:2019-03-05 20:06:36

标签: uwp treeview

如何在UWP树视图中以编程方式选择TreeViewItem?具体来说,我想选择树中的第一项。

我正在使用数据绑定。我知道我可以绑定IsSelected属性,但是,我要绑定的对象没有这样的属性,并且希望避免编写包装器。

2 个答案:

答案 0 :(得分:1)

如果编辑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类继承自ListView。 ListView具有SelectedItem属性。

因此,您可以创建一个继承TreeView类的自定义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属性上的绑定是更好的方法。

答案 1 :(得分:0)

SelectedNodes属性也可以是set。 也就是说,这应该可行:

myTreeView.SelectedNodes = new List<TreeViewNode>{ myTreeView.RootNodes[0] };