WPF控件属性的动态设置

时间:2011-12-13 17:21:59

标签: wpf properties dynamic assign

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

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

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

有办法做到这一点吗?

感谢。

2 个答案:

答案 0 :(得分:2)

这种类型并不重要,对吗?你需要的只是一个属性,所以你可以做这样的事情:

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

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

dynamic dynObject = (dynamic)FindName("name");
dynObject.IsEnabled = false;

答案 1 :(得分:1)

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

例如,使用一些帮助程序类here,您可以说

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

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