如何找出主题 WinForms 控件的基于主题的属性值?一般用于 DevExpress 或 WinForms

发布于 2024-10-21 00:41:55 字数 198 浏览 4 评论 0原文

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

基本上,我如何找出主题控件具有哪些属性设置集合?有没有办法让我看看主题定义?另外,我可以动态地查看这些设置,即在执行期间从应用程序内部查看(就像我可以在执行期间打印出无主题的 Appearance.BackColor 一样)?

I am dealing with this issue in DevExpress.XtraEditors context, but maybe the answer would also apply to other situations where themes are used for WinForms controls.

Basically, how do I find out what collection of property settings does a themed control have? Is there a way for me to go look at the theme definition? Also, can I look at these settings dynamically, i.e. from within the app during execution (much like I can print out unthemed Appearance.BackColor during execution)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

长不大的小祸害 2024-10-28 00:41:55

我不确定您在寻找什么,但如果您有兴趣查找所有控件(或控件 Type)的“外观”属性,您可以使用 TypeDescriptor.GetProperties 方法。此方法返回 PropertyDescriptorCollection您可以从中选择带有 CategoryAttribute.Appearance 属性的属性。

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

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(myButtonInstance);

或者,在控件 Type 上使用此方法:

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...
    }
}

I'm not certain what you're looking for, but if you're interested in finding all of a control's (or control Type's) 'Appearance' properties you can use the TypeDescriptor.GetProperties method. This method returns a PropertyDescriptorCollection from which you can pick out the properties with the CategoryAttribute.Appearance property.

You can use this method on an instance of the control:

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(myButtonInstance);

Or, on a control Type:

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(Button));

But once you get a PropertyDescriptorCollection you can test for the presence of CategoryAttribute.Appearance (which means the property appears in the control's 'Appearance' section - assuming Browsable == true) like this:

foreach (PropertyDescriptor property in properties) {
    if (property.Attributes.Contains(CategoryAttribute.Appearance)) {
        Console.WriteLine("{0} - {1}", property.Name, property.Description);
        // Do whatever...
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文