如何找到主题WinForms控件';基于主题的属性值?一般来说,适用于DevXPress或WinForms

如何找到主题WinForms控件';基于主题的属性值?一般来说,适用于DevXPress或WinForms,winforms,themes,devexpress,Winforms,Themes,Devexpress,我在DevExpress.XtraEditors上下文中处理这个问题,但答案可能也适用于WinForms控件使用主题的其他情况 基本上,我如何找出主题控件有哪些属性设置集合?有没有办法让我看看主题的定义?此外,我是否可以动态查看这些设置,即在执行过程中从应用程序内部查看(就像我可以在执行过程中打印出非主题外观。背景色)?我不确定您要查找什么,但如果您对查找所有控件(或控件类型)感兴趣“外观”属性您可以使用该方法。此方法返回一个属性,您可以从中选择具有CategoryAttribute.Appea

我在DevExpress.XtraEditors上下文中处理这个问题,但答案可能也适用于WinForms控件使用主题的其他情况


基本上,我如何找出主题控件有哪些属性设置集合?有没有办法让我看看主题的定义?此外,我是否可以动态查看这些设置,即在执行过程中从应用程序内部查看(就像我可以在执行过程中打印出非主题外观。背景色)?

我不确定您要查找什么,但如果您对查找所有控件(或控件<代码>类型)感兴趣“外观”属性您可以使用该方法。此方法返回一个属性,您可以从中选择具有
CategoryAttribute.Appearance
属性的属性

您可以在控件的实例上使用此方法:

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(myButtonInstance);
或者,在控件上键入:

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(Button));
但是,一旦获得
PropertyDescriptorCollection
,就可以测试是否存在
CategoryAttribute.Appearance
(这意味着该属性出现在控件的“外观”部分-假设Browsable==true),如下所示:

foreach (PropertyDescriptor property in properties) {
    if (property.Attributes.Contains(CategoryAttribute.Appearance)) {
        Console.WriteLine("{0} - {1}", property.Name, property.Description);
        // Do whatever...
    }
}