2015-10-31 5 views
-1

В моем приложении я использую PropertyGrid для установки атрибутов, связанных с загрузкой данных, установкой сцены и т. Д. У меня небольшая проблема, хотя, когда дело доходит до использования Vector3 в качестве свойства , Оказывается, если я попытаюсь использовать структуру OpenTK Vector3 как поле PropertyGrid, она деактивирует это поле (оно отображается как серое и не может быть изменено). Я предполагаю, что это связано с тем, что структура является неизменной, поэтому ее нельзя редактировать. Я хочу знать, есть ли способ обойти это. Я знаю, что я мог бы определить свой собственный Vector3 как класс, который будет работать, но я хочу продолжить использование OpenTK Vector3..NET Использование Struct в PropertyGrid

Вот захват экрана моего приложения:

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 
    } 
} 
+0

Почему голосование закрывается? Это правильный вопрос. – Krythic

+1

У вас есть доступ к определению 'Vector3'? Проверьте, есть ли у него 'TypeConverter', например, как [System.Drawing.Point] (http://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Point.cs,a041be61667d4c9a) –

+0

@IvanStoev Это не так: https://github.com/opentk/opentk/blob/develop/Source/OpenTK/Math/Vector3.cs – Krythic

ответ

0

Быстрая работа вокруг, не будучи именно то, что я предполагал, заключается в том, чтобы вместо этого использовать строку в формате «x, y, z» и преобразовывать ее в Вектор 3 всякий раз, когда редактируется поле. Я думаю, что это то, что Visual Studio делает для некоторых своих полей.

Смежные вопросы