将属性[Browsable(false)]
应用于属性时,wpftookit的PropertyGrid不再列出此属性(这是我的目标)。
但是,Visual Studio工具“实时属性编辑器”也停止显示此属性。这不是我的目标,并且会降低调试功能。
我当然可以处理诸如以下的编译器条件:
#if DEBUG
[Browsable(false)]
#endif DEBUG
但这会使该属性在使用调试版本时重新出现在PropertyGrid中(我在开发过程中主要这样做)。
是否有一种方法可以使该属性在“实时属性编辑器”中可见,但是将其从PropertyGrid中删除呢?
答案 0 :(得分:0)
您可以在运行时使用TypeDescriptors和TypeConvertors进行此操作,确定您是在Visual Studio中还是作为程序运行。
还有另一个堆栈溢出答案:C# PropertyGrid => How to change visible Properties at Runtime,它可以给出一些指针。
使用PropertyGrid中的内置支持来简单地根据另一个属性的值动态更改哪些属性是可见的并不简单。这并不意味着它不能完成,只是需要一些工作。
您已经发现,什么可以控制属性是否为 是否可见是BrowsableAttribute。所以基本上你需要 动态更改此属性,而方法是创建 您自己的类的TypeProvider和TypeDescriptor, 动态返回Browsable(false)或Browsable(true)属性 隐藏/显示属性取决于另一个的值 类中的属性。我不会尝试描述TypeProvider 和TypeDescriptor在这里起作用,因为它是一个冗长的主题,并且 网上有很多关于此主题的信息 已经。
此外,您需要指定 属性上的[RefreshProperties(RefreshProperties.All)]属性 控制另一个属性是否应该可见。这个 将强制propertygrid重新查询TypeDescriptor以获得列表 属性值更改时的属性集, TypeDescriptor有机会返回一组不同的属性,或者 返回的属性具有不同的属性。