以编程方式选择UWP树视图中的第一项

以编程方式选择UWP树视图中的第一项,uwp,treeview,Uwp,Treeview,如何在UWP树视图中以编程方式选择树视图项?具体来说,我想选择树中的第一项 我正在使用数据绑定。我知道我可以绑定IsSelected属性,但是,我绑定的对象没有这样的属性,因此希望避免编写包装。也可以设置SelectedNodes属性。 也就是说,这应该是可行的: myTreeView.SelectedNodes = new List<TreeViewNode>{ myTreeView.RootNodes[0] }; myTreeView.SelectedNodes=新列表{myT

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


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

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

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

如果编辑TreView的样式,您会发现在其ControlTemplate中,它实际上使用了一个控件


但是通过这种方式,您只能为根节点设置selectedItem。如果您想选择子节点,我仍然认为
IsSelected
属性上的绑定是更好的方法。

原则上这看起来不错,但是SelectedNodes是只读调用
。在它上面添加
work@SamTreeView控件与常规列表视图控件的selectedItem属性不同。它启用分层列表并包含嵌套项。它可能有N级嵌套。目前,我认为在IsSelected属性上绑定在实践中是一个不错的选择。@XavierXie MSFT我现在通过使用
x:Bind local:Class.ShouldSelect(属性)
解决了这个问题。Github上有关于WinUI的讨论,讨论如何添加SelectedNode属性,该属性现在应该能够最终解决这个问题。感谢Xavier的解释。看来SelectedNode很快就会出现。
<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>
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;
    }
}