Как получить ScrollViewer внутри TabItem в WPF - PullRequest
0 голосов
/ 23 сентября 2018

Мне нужно найти ScrollViewer внутри текущего TabItem, а затем найти WrapPanel внутри этого ScrollViewer

Я пробовал это:

    TabItem ti = tabControl.SelectedItem as TabItem;
        foreach (ScrollViewer sv in ti.Content)
        {
             foreach (WrapPanel wp in sv.Content) {}
        }

и это

   TabItem ti = tabControl.SelectedItem as TabItem;
        foreach (ScrollViewer sv in ti.Children)
        {
              foreach (WrapPanel wp in sv.Children) {}
        }

Но не работает

1 Ответ

0 голосов
/ 23 сентября 2018

Если элемент вашей вкладки непосредственно содержит ваш прокручиватель, вы можете сделать следующее:

TabItem ti = tabControl.SelectedItem as TabItem;
ScrollViewer sv = ti?.Content as ScrollViewer;
WrapPanel wp = scrollViewer?.Content as WrapPanel;

Другой способ доступа к вашей WrapPanel - использовать функцию, которая возвращает дочерний элемент / контент определенного типа.Например,

    public T FindVisualChildOrContentByType<T>(DependencyObject parent)
        where T : DependencyObject
    {
        if(parent == null)
        {
            return null;
        }

        if(parent.GetType() == typeof(T))
        {
            return parent as T;
        }

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);

            if(child.GetType() == typeof(T))
            {
                return child as T;
            }
            else
            {
                T result = FindVisualChildOrContentByType<T>(child);
                if (result != null)
                    return result;
            }
        }

        if(parent is ContentControl contentControl)
        {
            return this.FindVisualChildOrContentByType<T>(contentControl.Content as DependencyObject);
        }

        return null;

    }

Тогда вы сможете сделать

WrapPanel wp = this.FindVisualChildOrContentByType<WrapPanel>(tabItem);

Если это не работает, не стесняйтесь опубликовать свой XAML, чтобы я мог воспроизвести ваш точный сценарий.

...