0

我希望能够在我的 WPF 应用程序中为各种控件设置属性,其中我有控件的字符串名称及其类型的字符串名称,但我不知道该怎么做。到目前为止,我有这个:

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

我可以遍历控件名称列表并仅使用控件的字符串名称设置属性,但我想要的是能够做到这一点,而不必执行对象类型的显式硬编码转换。

有没有办法做到这一点?

谢谢。

4

2 回答 2

2

类型并不重要,对吧?您只需要一个属性,因此您可以执行以下操作:

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

或者,您可以使用dynamic,它做同样的事情:

dynamic dynObject = (dynamic)FindName("name");
dynObject.IsEnabled = false;
于 2011-12-13T17:26:15.370 回答
1

您可以导航 WPF 的VisualTree以按名称查找元素并设置属性。

例如,使用在这里找到的一些帮助类,你可以说

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

您实际上并不需要知道控件类型。所有具有IsEnabled属性的控件都基于UIElement,因此只需将控件转换为 aUIElement即可修改其IsEnabled属性

于 2011-12-13T17:29:05.877 回答