如何为闭源类型的所有属性注入自定义 UITypeEditor?
我想避免在我为其编写自定义 UITypeEditor 的特定类型的每个实例上放置 EditorAttribute。
我无法在类型上放置 EditorAttribute,因为我无法修改源。
我有一个对将使用的唯一 PropertyGrid 实例的引用。
我可以告诉 PropertyGrid 实例(或所有实例)在遇到特定类型时使用自定义 UITypeEditor 吗?
这里是一篇 MSDN 文章,提供了如何执行此操作的起点这在 .NET 2.0 或更高版本中。
I want to avoid placing an EditorAttribute on every instance of a certain type that I've written a custom UITypeEditor for.
I can't place an EditorAttribute on the type because I can't modify the source.
I have a reference to the only PropertyGrid instance that will be used.
Can I tell a PropertyGrid instance (or all instances) to use a custom UITypeEditor whenever it encounters a specific type?
Here is an MSDN article that provides are starting point on how to do this in .NET 2.0 or greater.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您通常可以在运行时通过 TypeDescriptor.AddAttributes 关联编辑器等。 例如(
Bar
属性应显示一个“...”,显示“正在编辑!”):You can usually associate editors etc at runtime via
TypeDescriptor.AddAttributes
. For example (theBar
property should show with a "..." that displays "Editing!"):Marc 的解决方案直截了当地将 EditorAttribute 应用于全局的 Bar 类型。 如果您性格比较敏感,您可能更愿意注释特定实例的属性。 唉,这对于
TypeDescriptor.AddAttributes
来说是不可能的。我的解决方案是编写一个包装器
ViewModel
,它从 T 复制属性,并用额外的属性注释一些属性。 假设我们有一个 Report 类型的变量datum
,我们会像这样使用它ViewModel
的定义:如上面所定义,这替换了特定类型的属性,但如果您需要更高的分辨率,您可以按名称替换属性。
Marc's solution bluntly applies the EditorAttribute to the Bar type globally. If you have a delicate disposition, you might rather annotate properties of a specific instances. Alas, that isn't possible with
TypeDescriptor.AddAttributes
My solution was to write a wrapper
ViewModel<T>
, which copies properties from T, annotating some with extra attributes. Suppose we have a variabledatum
of type Report, we'd use it like thisWhere
ViewModel<T>
is defined:As defined above, this substitutes properties of a specific type, but you can substitute properties by name if you need the greater resolution.
只需向您的类添加一个 编辑器属性 即可。
Just add an Editor attribute to your class.