我在那里编写了一个带有自定义对象的 PCL,然后创建了一个 GUI 来处理来自 PCL 的对象...并且我尝试使用 PropertyGrid 来编辑属性...我已经阅读了该内容以便网格要知道如何处理该对象,我需要指定 EditorAttribute 并提供 TypeConverter...但我不认为我可以在 PCL 中添加这 2 个...
有没有办法在 GUI 级别处理这个问题,比如告诉 PropertyGrid 在运行时使用特定类型的 Editor/TypeConverter?我浏览了网格的可用功能/属性列表,但看起来不可能。
您可以创建一个包含与原始类相同属性的元数据类,并使用一些属性来装饰元数据类的属性。然后告诉类型描述符使用元数据类为原始类提供类型描述:
var provider = new AssociatedMetadataTypeTypeDescriptionProvider(
typeof(MyClass),
typeof(MyClassMetadata));
TypeDescriptor.AddProvider(provider, typeof(MyPortableClass));
The PropertyGrid
控件使用类的类型描述符来显示类的属性、它们的显示名称、它们的描述、它们的编辑器等等。您可以通过不同的方式分配类型描述符。
对于您的情况,最好的解决方案是注册一个新的TypeDescriptorProvider
在运行时为您的课程。这样你就可以改变你的班级的外观PropertyGrid
只是在运行时。
Using AssociatedMetadataTypeTypeDescriptionProvider您可以为您的类创建一个类型描述符提供程序,该提供程序使用元数据类来提供类型描述。然后您可以使用注册提供商TypeDescriptor.AddProvider.
通过这种方式,您可以为您的类引入一个包含属性属性的元数据类。
逐步示例
-
将可移植类库添加到解决方案并向其中添加一个类:
public class MyClass
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
将可移植类库的引用添加到 Windows 窗体项目中。只要确保目标框架是一致的即可。
Add System.Design
and System.ComponentModel.DataAnnotations
对 Windows 窗体项目的引用。
-
在 Windows 窗体项目中,为可移植类添加元数据类。该类应包含与原始类完全相同的属性:
public class MyClassMetadata
{
[Category("My Properties")]
[DisplayName("First Property")]
[Description("This is the first Property.")]
public string Property1 { get; set; }
[Category("My Properties")]
[DisplayName("Second Property")]
[Description("This is the second Property.")]
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string Property2 { get; set; }
}
您需要添加这些用法:
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.Design;
using System.Drawing.Design;
-
In Load
如果您的表单发生事件,请通过以下方式注册您的类型的元数据提供程序:
var provider = new AssociatedMetadataTypeTypeDescriptionProvider(
typeof(MyClass),
typeof(MyClassMetadata));
TypeDescriptor.AddProvider(provider, typeof(MyClass));
-
在属性网格中显示可移植类的实例:
var myObject = new MyClass();
this.propertyGrid1.SelectedObject = myObject ;
这是运行应用程序后的结果:
![enter image description here](https://i.stack.imgur.com/VOcoQ.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)