PropertyGrid PaintValue: как удалить (и нарисовать снаружи) стандартный прямоугольник? - PullRequest
1 голос
/ 25 марта 2010

Это может быть простой вопрос, хотя я не нашел простого решения:

Я реализовал свой пользовательский UITypeEditor с единственной целью добавления PaintValue в bools. Для обсуждения давайте предположим, что PaintValue будет рисовать отмеченную или непроверенную радиокнопку.

Вопрос 1:

Теперь вот проблема: похоже, PaintValue автоматически вставляет прямоугольник размером 20x13 пикселей после завершения всего кода рисования. Естественно, радиокнопка внутри черного прямоугольника безобразна. Могу ли я легко проинструктировать или переопределить этот прямоугольник , а не для рисования?

Вопрос 2:

В этом отношении можно ли рисовать поверх собственного вида сетки свойств - значит, можно ли что-то нарисовать, чтобы затемнить (частично) черную линию, разделяющую две ячейки сетки по вертикали? Цель этого состоит в том, чтобы указать, что два значения были связаны, например, ограничение ширины / высоты с соотношением сторон.

Любой ответ высоко ценится.

Ответы [ 2 ]

3 голосов
/ 18 января 2017

Вы можете удалить прямоугольник, используя следующий код, но вы не можете рисовать за его пределами.Ну, вы можете рисовать, но PropertyGrid закрасит его позже, так что это не имеет особого смысла.

public override void PaintValue(PaintValueEventArgs e)
{
    // remove the lines (you cannot draw on these lines anymore)
    e.Graphics.ExcludeClip(
        new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, 1));
    e.Graphics.ExcludeClip(
        new Rectangle(e.Bounds.X, e.Bounds.Y, 1, e.Bounds.Height));
    e.Graphics.ExcludeClip(
        new Rectangle(e.Bounds.Width, e.Bounds.Y, 1, e.Bounds.Height));
    e.Graphics.ExcludeClip(
        new Rectangle(e.Bounds.X, e.Bounds.Height, e.Bounds.Width, 1));
    // now draw your own image - it will be shown without the box
    e.Graphics.DrawImage(myImage, e.Bounds);
}
3 голосов
/ 25 марта 2010

Я не знаю про рисование, но в пункте 2 - возможно, добавьте глиф через IPropertyValueUIService - есть пример на codeproject .

...