WPF控件属性的动态设置

WPF控件属性的动态设置,wpf,properties,dynamic,assign,Wpf,Properties,Dynamic,Assign,我希望能够在我的WPF应用程序中为各种控件设置属性,其中我有控件的字符串名称及其类型的字符串名称,但我不知道如何做。到目前为止,我有: ( (TabItem)this.FindName( "tabPatient" ) ).IsEnabled = false; 我可以遍历控件名列表并仅使用控件的字符串名设置属性,但我希望能够做到这一点,而不必执行对象类型的显式硬编码转换 有办法做到这一点吗 谢谢。类型并不重要,对吗?你所需要的只是一个财产,所以你可以这样做: var obj = FindName

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

( (TabItem)this.FindName( "tabPatient" ) ).IsEnabled = false;
我可以遍历控件名列表并仅使用控件的字符串名设置属性,但我希望能够做到这一点,而不必执行对象类型的显式硬编码转换

有办法做到这一点吗


谢谢。

类型并不重要,对吗?你所需要的只是一个财产,所以你可以这样做:

var obj = FindName("name");
obj.GetType().GetProperty("IsEnabled").SetValue(obj, false);
或者,您也可以使用,它的作用大致相同:

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

类型并不重要,对吗?你所需要的只是一个财产,所以你可以这样做:

var obj = FindName("name");
obj.GetType().GetProperty("IsEnabled").SetValue(obj, false);
或者,您也可以使用,它的作用大致相同:

dynamic dynObject = (dynamic)FindName("name");
dynObject.IsEnabled = false;
您可以导航WPF以按名称查找元素并设置属性

例如,使用找到的一些帮助器类,您可以说

foreach(var s in controlList)
{
    var ctrl = VisualTreeHelpers.FindChild<UIElement>(this, s);
    if (ctrl != null)
        ctrl.IsEnabled = false;
}
foreach(controlList中的var s)
{
var ctrl=visualtreehelopers.FindChild(this,s);
如果(ctrl!=null)
ctrl.IsEnabled=false;
}
您实际上不需要知道控件类型。所有具有
IsEnabled
属性的控件都基于
UIElement
,因此只需将控件强制转换为
UIElement
即可修改其
IsEnabled
属性您可以导航WPF,按名称查找元素并设置属性

例如,使用找到的一些帮助器类,您可以说

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

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

哇,Rachel,谈谈全面性。我喜欢H.B.的答案,因为这是一个非常简单的方法来做我需要的事情,但你的方法真的把它打乱了。你从一个问题的微观方面入手,解决了宏观方面的问题。您的方法对解决我眼前的问题非常有帮助,并且在我继续学习的过程中,您的方法是深入理解WPF的思想食粮。非常感谢。@MikeMatter很高兴你发现它很有用:)我经常想在WPF的可视化树中找到一些东西,并且厌倦了将相同的方法复制/粘贴到我的代码中,所以只需将它们全部写到我的WPF库中哇,Rachel,谈谈全面性。我喜欢H.B.的答案,因为这是一个非常简单的方法来做我需要的事情,但你的方法真的把它打乱了。你从一个问题的微观方面入手,解决了宏观方面的问题。您的方法对解决我眼前的问题非常有帮助,并且在我继续学习的过程中,您的方法是深入理解WPF的思想食粮。非常感谢。@MikeMatter很高兴你发现它很有用:)我经常想在WPF的可视化树中找到一些东西,并且厌倦了将相同的方法复制/粘贴到我的代码中,所以只需将它们全部写入我的WPF库HB,谢谢你的回答,真的很酷,帮助我了解了更多的情况。这是一个很好的答案,并且得到了我想要的结果。我确实将Rachel的回答作为问题的答案,因为她的回答不仅解决了眼前的问题,而且为解决其他WPF导航问题提供了一个框架。再次感谢。HB,谢谢你的回答,真的很酷,帮助我了解了更多的事情。这是一个很好的答案,并且得到了我想要的结果。我确实将Rachel的回答作为问题的答案,因为她的回答不仅解决了眼前的问题,而且为解决其他WPF导航问题提供了一个框架。再次感谢。