Как сделать тип редактируемым в окне свойств в Visual Studio? - PullRequest
0 голосов
/ 27 августа 2018

Например, у нас есть эти типы

public struct Vector2D
{
    public double X{get; set;}
    public double Y{get; set;}
}

Один из моих пользовательских элементов управления имеет свойство с именем Value с типом Vector2D

В настоящее время, если я посмотрю эту собственность. Он будет отображать <namespace>.Vector2D и не будет редактироваться. (Обратите внимание, что это свойство доступно для редактирования, и оно буквально не отображается как таковое)

Как сделать это свойство редактируемым через окно свойств в Visual Studio, как Point, Size, Padding и т. Д.

Пытается добавить BrowsableAttribute, EditorAttribute без аргументов, но это не работает.

1 Ответ

0 голосов
/ 27 августа 2018

Я так понимаю, вы имеете в виду редактирование переменной через элемент управления PropertyGrid. если это так, вы можете вызвать пользовательский редактор свойств для редактирования этого конкретного объекта. Я также рекомендую переопределить функцию ToString, какой формат по вашему выбору. PropertyGrid использует это значение для отображения пользователю.

как реализовать собственный редактор:

public struct Vector2D : UITypeEditor
{
    //UITypeEditor Implementation

    //Gets the editor style, (dropdown, value or new window)
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }

    //Gets called when the value has to be edited.
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        //Calls a dialog to edit the object in
        EditTypeConfig editor = new EditTypeConfig((TypeConfig)value);
        editor.Text = context.PropertyDescriptor.Name;

        if (editor.ShowDialog() == DialogResult.OK)
            return editor.SelectedObject;
        else
            return (TypeConfig)value;
    }

    //Properties

    [DisplayName("X"), Description("X is something"), Category("Value"), ReadOnly(false)]
    public double X { get; set; }
    [DisplayName("Y"), Description("Y is something"), Category("Value"), ReadOnly(false)]
    public double Y { get; set; }
}

Использование:

public class Sample
{
    [DisplayName("Value"), Description("Value is something"), Category("Vectors"), ReadOnly(false)]
    [Editor(typeof(Vector2D), typeof(UITypeEditor))]
    public Vector2D Value { get; set; } 
//Editor(typeof(Vector2D)) calls a class that handles the the editing of that value
    }

Я надеюсь, что это решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...