我目前希望使用一个PropertyGrid来允许用户编辑我的一些类,但是我遇到了一个难题,就是把对象传递给他们使用的UITypeEditor。当用户按下下拉时,我想显示一个已经加载的纹理列表框供选择,如果他们想使用应用程序尚未加载的纹理,他们可以单击一个按钮从文件对话框中选择一个。如果我在这里没有意义的话,我会嘲笑这个表格:

。
My problem:来填充列表框,我需要访问管理来自UITypeEditor的资源列表的类。
现在,我已经为我自己的类解决了这个问题,给他们一个关于创建他们的管理对象的参考。然后,在UITypeEditor中,我使用该引用来访问我所需的内容。但是,对于我还没有编写的类,比如XNA Texture2D类,我不能这样做。
下面是我使用的类:
class StaticGeometryChunk
{
// Geometry data to draw with. Contains a reference to its managing
// class for use in its UITypeEditor.
public GeometryData { get; set; }
....
}
class Material
{
// These are XNA classes. I can't just add a reference to its managing
// class (I think?).
public Texture2D Texture1 { get; set; }
public Texture2D Texture2 { get; set; }
....
}我一直在考虑我的选择,它们似乎是:
我真的不想这么做。有几个管理类,因为每个资源以不同的方式加载。还有一些类需要在这些类之前创建并传入。
我也不想这么做。这似乎是一种快速而肮脏的“隐藏”问题的方法,而不是“解决”问题。我也可能希望在将来有几个管理类的选项,而这些类将被单子取消。
这就是我现在想要做的。这将是相当简单和迅速的行动,但关于它的一些困扰我,但我不知道是什么。
对上述或其他方法有什么想法来将我需要的东西传递到UITypeEditor中吗?
感谢您的阅读。
发布于 2009-06-18 12:20:33
在EditValue方法中,您将得到一个上下文。使用context.Instance访问保存属性的对象。此对象还应包含一个属性,该属性允许您访问要显示的内容列表。例如,您可以测试context.Instance是否为ITextureProvider,然后转换它并访问纹理。不确定这在你的设计中是否有意义,但请告诉我。
发布于 2010-05-19 10:44:47
作为一种选择,您可以尝试以下方法。我发现它非常优雅,因为它不需要在对象中存储可用属性值的列表。因此,例如,您可以在一个窗体上显示一组值,在另一个窗体上显示另一组值。
IYourDataProviderService.
的ISite方法的其余部分( DesignMode属性除外),但对我来说,这可能不是一个理想的解决方案。
https://stackoverflow.com/questions/1010617
复制相似问题