Как я могу получить доступ к объекту по типу класса? - PullRequest
0 голосов
/ 10 июля 2019

Я разрабатываю приложение WPF.В моем приложении я хочу получить доступ к объектам по типу класса.

Я пробовал ниже блок кода.

  public static IEnumerable<T> FindVisualChildren<T>(DependencyObject 
    depObj) where T : DependencyObject
  {
    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
            if (child != null && child is T)
            {
                yield return (T)child;
            }

            foreach (T childOfChild in FindVisualChildren<T>(child))
            {
                yield return childOfChild;
            }
        }
    }
  }

В моем приложении я использовал следующий способ.

foreach (Storyboard sb in FindVisualChildren<Storyboard>(window))
{
     // There is no accessable storyboard object
}

Я могу получить доступ к Control объектам, но я могунет доступа к не UIElement объектам.Например: я могу найти RadioButton, но не могу найти Storyboard объектов.

1 Ответ

2 голосов
/ 10 июля 2019

Как упоминалось в комментариях, Storyboard не является визуальным элементом, который добавляется в визуальное дерево, поэтому VisualTreeHelper не сможет его найти.

Но вы можете добавить все свои Storyboards в словарь Resources окна и перебрать ресурсы:

Storyboard sb1 = new Storyboard();
Storyboard sb2 = new Storyboard();
...
Resources.Add("sb1", sb1);
Resources.Add("sb2", sb2);
...
foreach (Storyboard sb in Resources.Values.OfType<Storyboard>())
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...