我目前希望使用PropertyGrid来允许用户编辑我的一些类,但是我已经碰到了将对象传递给他们使用的UITypeEditor的墙。当用户按下下拉列表时,我想显示已加载纹理的列表框以供选择,如果他们想要使用应用程序尚未加载的纹理,他们可以单击按钮从文件对话框中选择一个。如果我在这里没有任何意义的形式的模拟:
我的问题:要填充列表框,我需要访问管理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的任何想法吗?
感谢您的阅读。
答案 0 :(得分:9)
在EditValue方法中,您将获得一个上下文。使用context.Instance访问保存属性的对象。此对象还应包含一个属性,使您可以访问要显示的事物列表。您可以测试context.Instance是否为ITextureProvider,然后将其转换并访问纹理。不确定这在你的设计中是否有意义,但请告诉我。
答案 1 :(得分:4)
作为替代方案,您可以尝试以下方法。我发现它非常优雅,因为它不需要在对象中存储可用属性值的列表。因此,例如,您可以在一个表单上显示一组值,在另一个表单上显示另一组值。