首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象传递给UITypeEditor

将对象传递给UITypeEditor
EN

Stack Overflow用户
提问于 2009-06-18 03:18:10
回答 2查看 4K关注 0票数 5

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

My problem:来填充列表框,我需要访问管理来自UITypeEditor的资源列表的类。

现在,我已经为我自己的类解决了这个问题,给他们一个关于创建他们的管理对象的参考。然后,在UITypeEditor中,我使用该引用来访问我所需的内容。但是,对于我还没有编写的类,比如XNA Texture2D类,我不能这样做。

下面是我使用的类:

代码语言:javascript
复制
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; }
    ....
}

我一直在考虑我的选择,它们似乎是:

  1. 使管理类成为静态的.

我真的不想这么做。有几个管理类,因为每个资源以不同的方式加载。还有一些类需要在这些类之前创建并传入。

  1. 使管理类单身.

我也不想这么做。这似乎是一种快速而肮脏的“隐藏”问题的方法,而不是“解决”问题。我也可能希望在将来有几个管理类的选项,而这些类将被单子取消。

  1. 创建一个包装类,该类保存对管理类及其目标(例如XNA Texture2D)的引用。

这就是我现在想要做的。这将是相当简单和迅速的行动,但关于它的一些困扰我,但我不知道是什么。

对上述或其他方法有什么想法来将我需要的东西传递到UITypeEditor中吗?

感谢您的阅读。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-18 12:20:33

在EditValue方法中,您将得到一个上下文。使用context.Instance访问保存属性的对象。此对象还应包含一个属性,该属性允许您访问要显示的内容列表。例如,您可以测试context.Instance是否为ITextureProvider,然后转换它并访问纹理。不确定这在你的设计中是否有意义,但请告诉我。

票数 9
EN

Stack Overflow用户

发布于 2010-05-19 10:44:47

作为一种选择,您可以尝试以下方法。我发现它非常优雅,因为它不需要在对象中存储可用属性值的列表。因此,例如,您可以在一个窗体上显示一组值,在另一个窗体上显示另一组值。

IYourDataProviderService.

  • Create

  • 创建了一个接口,它是IYourDataProviderService的实现,它知道实现ISite的类provide.
  1. Create的具体数据。在GetService()方法中,如果serviceType参数为serviceType( IYourDataProviderService ),则返回实现serviceType的类实例。我留下了抛出propertygrid.
  2. Enjoy!

的ISite方法的其余部分( DesignMode属性除外),但对我来说,这可能不是一个理想的解决方案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1010617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档