.NET在PropertyGrid中使用Struct

时间:2015-10-31 19:31:40

标签: c# propertygrid

在我的应用程序中,我使用PropertyGrid来设置与加载数据,设置场景等相关的属性。但是,当涉及到使用Vector3作为属性时,我有一个小问题。事实证明,如果我尝试使用OpenTK Vector3结构作为PropertyGrid的字段,它会停用该字段(它显示为灰色且无法更改)。我假设这是由于结构是不可变的,因此无法编辑。我想知道是否有办法解决这个问题。我知道我可以将自己的Vector3定义为一个类,但是我想继续使用OpenTK Vector3。

以下是我的应用程序的屏幕抓取:

enter image description here

这是PropertyGrid设置类:

using System.ComponentModel;
using OpenTK;
using StardustModeling.Modeling.IOFilters;

namespace StardustModeling.Modeling
{
    public class ModelBuilderSceneSettings
    {
        [Description( "The name of the compiled model." ),
         Category( "Information" )]
        public string Name { get; set; } = "";

        [Description( "The geometry data for the model." ),
         Category( "Data" ),
            Editor(
            typeof( WavefrontModelFilter ) ,
            typeof( System.Drawing.Design.UITypeEditor ) )]
        public string GeometryMesh { get; set; } = "";

        [Description( "The Diffuse Texture of the model." ),
         Category( "Texturing" ), Editor(
            typeof( BitmapFilter ) ,
            typeof( System.Drawing.Design.UITypeEditor ) )]
        public string Diffuse { get; set; } = "";

        [Description( "The NormalMap for the model." ),
         Category( "Texturing" ), Editor(
            typeof( BitmapFilter ) ,
            typeof( System.Drawing.Design.UITypeEditor ) )]
        public string Normals { get; set; } = "";

        [Description( "Position of the scene lamp." ),
         Category( "Scene" )]
        public Vector3 Lamp { get; set; } = new Vector3(2,2,2);

        [Description( "Model Position." ),
         Category( "Scene" )]
        public Vector3 ModelLocation { get; set; } = new Vector3(); // Default 0,0,0
    }
}

1 个答案:

答案 0 :(得分:0)

快速解决,虽然不完全符合我的意图,但是使用字符串代替,格式为“x,y,z”,并在编辑字段时将其转换为Vector3。我认为这就是Visual Studio为其某些领域所做的事情。