UWP WinUI TreeView программно прокрутить до элемента - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь использовать новый WinUI инструментарий TreeView control. Мне нужно программно прокрутить до определенного элемента.

Я не могу найти способ сделать это.

1 Ответ

0 голосов
/ 27 августа 2018

В настоящее время в классе TreeView нет такого API, который использовался для прокрутки в поле зрения. Но вы можете получить TreeViewList в TreeView 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 - ListControl в стиле TreeView.

<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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...