Динамическая настройка свойств управления WPF - PullRequest
0 голосов
/ 13 декабря 2011

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

( (TabItem)this.FindName( "tabPatient" ) ).IsEnabled = false;

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

Есть ли способ сделать это?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Тип не имеет большого значения, верно?Все, что вам нужно, это свойство, поэтому вы можете сделать что-то вроде этого:

var obj = FindName("name");
obj.GetType().GetProperty("IsEnabled").SetValue(obj, false);

В качестве альтернативы вы можете использовать dynamic, что примерно так же:

dynamic dynObject = (dynamic)FindName("name");
dynObject.IsEnabled = false;
1 голос
/ 13 декабря 2011

Вы можете перемещаться по WPF VisualTree , чтобы найти элемент по имени и установить свойство.

Например, используя некоторые найденные вспомогательные классы здесь вы можете сказать

foreach(var s in controlList)
{
    var ctrl = VisualTreeHelpers.FindChild<UIElement>(this, s);
    if (ctrl != null)
        ctrl.IsEnabled = false;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...