我希望能够在我的WPF应用程序中为各种控件设置属性,其中我有控件的字符串名称和类型的字符串名称,但我不知道如何操作。到目前为止,我有这个:
( (TabItem)this.FindName( "tabPatient" ) ).IsEnabled = false;
我可以遍历控件名称列表并使用控件的字符串名称设置属性,但我想要的是能够执行它而无需执行对象类型的显式硬编码转换。
有办法做到这一点吗?
感谢。
答案 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
属性