Используйте отражение, чтобы искать элементы управления в стороне составного элемента управления wpf - PullRequest
1 голос
/ 10 августа 2011

Я пытаюсь написать метод, который будет проверять пользовательский контроль wpf, содержащий другие элементы пользовательского контроля wpf.Например, один из пользовательских элементов управления содержит сетку данных со столбцами, добавленными с использованием xaml.Я хочу иметь возможность манипулировать именованным столбцом в сетке данных.Я пытаюсь использовать отражение, и я не могу найти способ получить внутренний контроль.Я пробовал разные методы get (GetProeprties, GetMembers, GetFields), но не могу найти коллекцию внутренних пользовательских контролей.Любые идеи будут оценены.

1 Ответ

3 голосов
/ 10 августа 2011

Вы пытались использовать FindName?

var col = uc.FindName("MyColumn") as DataGridColumn;

Редактировать: Это работает в простых случаях, но для вложенных пользовательских контролей это может не сработать.В этом случае вы можете использовать его рекурсивно, вот несколько схематично реализованных:

public static object FindNamedObject(FrameworkElement container, string name)
{
    var target = container.FindName(name);
    if (target == null)
    {
        int count = VisualTreeHelper.GetChildrenCount(container);
        for (int i = 0; i < count; i++)
        {
            var child = VisualTreeHelper.GetChild(container, i) as FrameworkElement;
            if (child != null)
            {
                target = FindNamedObject(child, name);
                if (target != null)
                {
                    break;
                }
            }
        }
    }
    return target;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...