我希望能够在我的 WPF 应用程序中为各种控件设置属性,其中我有控件的字符串名称及其类型的字符串名称,但我不知道该怎么做。到目前为止,我有这个:
( (TabItem)this.FindName( "tabPatient" ) ).IsEnabled = false;
我可以遍历控件名称列表并仅使用控件的字符串名称设置属性,但我想要的是能够做到这一点,而不必执行对象类型的显式硬编码转换。
有没有办法做到这一点?
谢谢。
我希望能够在我的 WPF 应用程序中为各种控件设置属性,其中我有控件的字符串名称及其类型的字符串名称,但我不知道该怎么做。到目前为止,我有这个:
( (TabItem)this.FindName( "tabPatient" ) ).IsEnabled = false;
我可以遍历控件名称列表并仅使用控件的字符串名称设置属性,但我想要的是能够做到这一点,而不必执行对象类型的显式硬编码转换。
有没有办法做到这一点?
谢谢。
类型并不重要,对吧?您只需要一个属性,因此您可以执行以下操作:
var obj = FindName("name");
obj.GetType().GetProperty("IsEnabled").SetValue(obj, false);
或者,您可以使用dynamic
,它做同样的事情:
dynamic dynObject = (dynamic)FindName("name");
dynObject.IsEnabled = false;
您可以导航 WPF 的VisualTree以按名称查找元素并设置属性。
例如,使用在这里找到的一些帮助类,你可以说
foreach(var s in controlList)
{
var ctrl = VisualTreeHelpers.FindChild<UIElement>(this, s);
if (ctrl != null)
ctrl.IsEnabled = false;
}
您实际上并不需要知道控件类型。所有具有IsEnabled
属性的控件都基于UIElement
,因此只需将控件转换为 aUIElement
即可修改其IsEnabled
属性