UWP WinUI TreeView以编程方式滚动到项目

时间:2018-08-25 09:13:19

标签: uwp

我正在尝试使用新的WinUI工具包TreeView控件。我需要以编程方式滚动到特定项目。

我找不到办法。

1 个答案:

答案 0 :(得分:0)

当前,TreeView类中没有用于滚动到视图的api。但是您可以在TreeView TreeViewList中获得ControlTemplate。它基于包含ListViewBase方法的ScrollIntoView。要获取TreeViewList,您可以使用VisualTreeHelper类。

public static DependencyObject FindChildByName(DependencyObject parant, string  ControlName)
{
    int count = VisualTreeHelper.GetChildrenCount(parant);

    for (int i = 0; i < count; i++)
    {
        var MyChild = VisualTreeHelper.GetChild(parant, i);
        if (MyChild is FrameworkElement && ((FrameworkElement)MyChild).Name == ControlName)
            return MyChild;

        var FindResult = FindChildByName(MyChild, ControlName);
        if (FindResult != null)
            return FindResult;
    }
    return null;
}

并且TreeViewList的名称是TreeView样式中的ListControl。

<TreeViewList x:Name="ListControl" AllowDrop="False" 
              CanReorderItems="False" 
              CanDragItems="False" 
              ItemContainerStyle="{StaticResource TreeViewItemStyle}" 
              ItemTemplate="{StaticResource CultureItemDataTemplate}">
    <TreeViewList.ItemContainerTransitions>
        <TransitionCollection>
            <ContentThemeTransition/>
            <ReorderThemeTransition/>
            <EntranceThemeTransition IsStaggeringEnabled="False"/>
        </TransitionCollection>
    </TreeViewList.ItemContainerTransitions> 
</TreeViewList>

用法

private void Button_Click(object sender, RoutedEventArgs e)
{
    var listControl = FindChildByName(treeView1, "ListControl") as ListViewBase;
    listControl.ScrollIntoView(treeView1.RootNodes.LastOrDefault());
}