c# - 将对象传递给 UITypeEditor

标签 c# propertygrid uitypeeditor

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

Dropdown Image .

我的问题:为了填充列表框,我需要访问管理来自 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; }
    ....
}

我一直在研究我的选择,它们似乎是:

  1. 将管理类设为静态。

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

  1. 将管理类设为单例。

我也不想这样做。这似乎是一种“隐藏”问题而不是“解决”问题的快速而肮脏的方法。我也可能希望在未来有多个管理类的选项,而单例会消除这些类。

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

这就是我目前正在考虑做的事情。这将是非常简单和快速的事情,但有些事情让我很烦,但我不知道是什么。

关于将我需要的内容传递到 UITypeEditor 的上述方法或其他方法有什么想法吗?

感谢阅读。

最佳答案

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

关于c# - 将对象传递给 UITypeEditor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010617/

相关文章:

c# - 如何刷新 PropertyGrid 中的本地化属性

c# - 如何向 PropertyGrid 的 CollectionEditor 添加验证?

codesmith - 有人有一个可以选择 System.Type 实例的 UITypeEditor 吗?

c# - 将字符串从 HTTPHandler 返回到发布此 .ashx 文件的页面的最佳方法

c# - Streamreader readline阻塞tcp许多客户端c#

java - 有人知道 SWT 中的 PropertyEditor 或 PropertyGrid 之类的东西吗?

c# - 如何在运行时打开没有 PropertyGrid 的复杂属性的属性对话框

c# - 关闭后 IWindowsFormsEditorService 延迟

c# - 如何使用linq从表中获取最大id

c# - 将 C# 转换为 VB NET 时出现委托(delegate)错误