Как я могу удалить отображаемую строку по умолчанию "(Коллекция)" в PropertyGrid? - PullRequest
1 голос
/ 09 мая 2019

Моя цель - заменить отображаемое значение свойства PropertyGrid через собственный UITypeEditor.Но я не могу удалить отображаемую строку по умолчанию "(Коллекция)", которая всегда отображается.

I want to remove the

Я пробовал e.Graphics.Clearи рисование белой кистью в графике.Но это не работает.Вот мой код:

public class MyUITypeEditor : UITypeEditor
{
    public override void PaintValue(PaintValueEventArgs e)
    {
        // Not working:
        //e.Graphics.Clear(Color.White);
        //using (SolidBrush brush = new SolidBrush(Color.White))
        //{
        //    e.Graphics.FillRectangle(brush, e.Bounds);
        //}

        e.Graphics.DrawString(
            "0|0, 10|10",
            new Font("Arial", 10f, FontStyle.Bold),
            new SolidBrush(Color.Black),
            new Point(0, 0));
    }

    public override bool GetPaintValueSupported(ITypeDescriptorContext context)
    {
        return true;
    }
}

1 Ответ

0 голосов
/ 17 июля 2019

Что вам нужно сделать, это определить новый элемент TypeConverter и переопределить методы ниже:

public class test_typeconverter : TypeConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture,
    object value, Type destinationType)
            => "Text requiered";

    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) => true;

    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) => false;
}

Затем вы должны определить этот тип как преобразователь типов коллекции, которую вы хотите показать в сетке свойств, как показано ниже:

[TypeConverter(typeof(test_typeconverter))]
public List<int> Values { get; set; }

Result of the code

...