0

我有一个现有的自定义控件库,其中包含可能包含属性的控件: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 上做一些变体,但使用我自己的条件,但是我无法找到通过按钮/切换更改条件的方法。

谁能帮我解决我的问题?我有 20 到 30 个控件,其中包含 20 到 30 个要过滤的属性。

4

2 回答 2

1

我有两个建议,虽然它们可能无法为您提供所需的确切功能,但可以使您的解决方案更加直接。

第一:由于您是库开发人员,您只需决定希望其他开发人员通过 IDE 属性窗口访问哪些属性。如果某个属性很少通过 IDE 使用或不是很有用,那么只需在其上放置 [Browsable(false)] 属性即可。

第二:如果您真的希望所有属性都在 IDE 属性窗口中可见,但想给个人一种隐藏更高级(或较少使用)的方法,只需将它们全部放入“高级”类别。然后,用户可以简单地折叠该类别并忘记它们。

另外:看看奥利弗对这个问题的回答: [how-to-show-or-hide-properties-dynamically-in-the-propertygrid]

于 2013-01-17T17:46:33.987 回答
0

我不确定您要达到的目标。

当您使用属性时,这些属性对于类是静态的。因此,在您的情况下,当您在对象上切换显示/隐藏时,它位于对象的实例上。此外,您不能在运行时更改属性值。

也许您应该尝试另一种解决方案,例如创建全局

map<pair<type of object, property name>, is shown>

并从您的编辑器相应地更新。

如果你想使用属性网格之类的东西,你会遇到问题,因为它不会检查你的地图,但可以修复它。您可以在运行时创建一个新类并使其成为当前实例的代理。(在网上查看如何实现这一点,但这很简单。有两种可能性:从字符串编译或使用 ILGenerator。

希望这有帮助。

于 2013-01-17T15:11:22.283 回答