我有一个现有的自定义控件库,其中包含可能包含属性的控件:HeaderStyle,ModalStyle,Collapsable等...
在用户界面中,程序当前正在显示这些属性的分类列表。我试图更新此代码以隐藏他们通常不使用的属性。我有一个基于按钮单击隐藏/显示的属性列表,但我不确定如何以编程方式隐藏这些字段。
我想保留在隐藏之前输入到字段中的任何值,如果再次显示字段,则重新显示值。
这是一个当前存在但希望隐藏/显示在切换上的属性。
/// <summary>ModalStyle property for control</summary>
[XmlAttribute]
[DefaultValue(Utility.Common.Enumerations.ModalStyle.None)]
[Category(PropertyCategories.Rendering)]
[Description("Modal dialog style")]
public ModalStyle? ModalStyle
{
get { return control.ModalStyleActive; }
set { control.ModalStyle = value; }
}
我原来的是在#if DEBUG上做一些变种,但是使用我自己的Conditional但是我无法通过按钮/切换来找到改变条件的方法。
任何人都可以帮助解决我的问题吗?我有20-30个控件,有20到30个想要过滤的属性。
答案 0 :(得分:1)
我有两条建议,虽然它们可能无法为您提供所需的确切功能,但会让您的解决方案更直接。
第一: 由于您是库开发人员,因此您应该通过IDE属性窗口确定您希望其他开发人员可以访问哪些属性。如果一个属性很少使用或通过IDE非常有用,那么只需在其上放置[Browsable(false)]属性。
第二: 如果您确实希望在IDE属性窗口中显示所有属性,但希望为个人提供隐藏更高级(或更少使用)属性的方法,则只需将它们全部放在“高级”类别中即可。然后,用户可以简单地折叠该类别并忘记它们。
另外:看看Oliver对这个问题的回答: [how-to-show-or-hide-properties-dynamically-in-the-propertygrid]
答案 1 :(得分:0)
我不确定你想要达到的目的。
使用属性时,它们对类是静态的。因此,在您的情况下,当您在对象上切换显示/隐藏时,它位于对象的实例上。此外,您无法在运行时更改属性值。
也许您应该尝试另类解决方案,例如创建全局
map<pair<type of object, property name>, is shown>
并从编辑器中相应地更新。
如果你想使用类似属性网格的东西,你会遇到问题,因为它不会检查你的地图,但它可以修复。您可以在运行时创建一个新类,并使其成为当前实例的代理。 (检查网络如何实现,但它很简单。有两种可能:从字符串编译或使用ILGenerator。
希望得到这个帮助。