繁体   English   中英

在PropertyGrid中隐藏属性而不影响Visual Studio Live属性

[英]Hide property in PropertyGrid without affecting Visual Studio Live Property

将属性[Browsable(false)]应用于属性时,wpftookit的PropertyGrid不再列出该属性(这是我的目标)。

但是,Visual Studio工具“实时属性编辑器”也停止显示此属性。 这不是我的目标,并且会降低调试功能。

我当然可以处理编译器条件,例如:

#if DEBUG
[Browsable(false)]
#endif DEBUG

但这会使该属性在使用调试版本时重新出现在PropertyGrid中(我在开发过程中主要这样做)。

有没有一种方法可以使该属性在“实时属性编辑器”中可见,但是将其从PropertyGrid中删除呢?

您可以在运行时使用TypeDescriptors和TypeConvertors做到这一点,方法是确定自己是在Visual Studio中还是作为程序运行。

还有另一个堆栈溢出答案: C#PropertyGrid =>如何在运行时更改可见属性,属性可以提供一些指针。

使用PropertyGrid中的内置支持来简单地根据另一个属性的值动态更改哪些属性是可见的并不简单。 这并不意味着它不能完成,只是需要一些工作。

正如您已经发现的,控制属性是否可见的是BrowsableAttribute。 因此,基本上,您需要动态更改此属性,而实现此目的的方法是为您的类创建自己的TypeProvider和TypeDescriptor,该类将动态返回Browsable(false)或Browsable(true)属性以隐藏/显示该属性取决于类中另一个属性的值。 我不会尝试在这里描述TypeProvider和TypeDescriptor的工作方式,因为这是一个冗长的主题,并且在网络上已经有很多关于此主题的信息。

另外,您需要在属性上指定[RefreshProperties(RefreshProperties.All)]属性,以控制另一个属性是否可见。 每当值更改时,这将迫使propertygrid重新查询TypeDescriptor以获取属性列表,这使您的TypeDescriptor有机会返回一组不同的属性,或者返回的属性具有不同的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM