Есть ли класс "Ручки" для дополнения "Кисти" и "Цвета" в WPF?

Там не один называется Pensэто точно, но слишком странно не найти его. Это действительно отсутствует или я слепой?

(Я просто ищу удобный класс - например, Colors.Red а также Brushes.Red есть, но для ручек самый короткий new Pen(Brushes.Red, 1))

2 ответа

Решение

Там не связано Pens класс, потому что Pen идентифицируется как Brush иThickness а не только одно свойство.

Если вам нужен набор стандартных ручек (в зависимости от толщины), вам придется создать свой собственный. Другой подход заключается в создании генератора кода для подачи соответствующих ручек.

Вот пример класса, который добавляет Pen за каждый дефолт Brush:

public class DefaultPens
{
    private Dictionary<Brush, Pen> pens;

    public double Thickness
    {
        get;
        private set;
    }

    // used like defaultPens[Brushes.Red]
    public Pen this[Brush brush]
    {
        get { return this.pens[brush]; }
    }

    public DefaultPens(double thickness)
    {
        this.pens = typeof(Brushes).GetProperties(BindingFlags.Static)
                                   .Where(pi => pi.PropertyType == typeof(Brush))
                                   .Select(pi => pi.GetValue(null, null))
                                   .ToDictionary(
                                       b => b,
                                       b => new Pen(b, thickness));
        this.Thickness = thickness;
    }
}

Здесь нет Pens класс, так как это было бы излишним. (Хотя ты прав: Colors а также Brushes тоже несколько избыточны.)

Зачем? Хорошо, просто подумайте, что за ручка: ее свойства можно описать штрихом с (или: толщиной) и цветом (или: кистью). Следовательно, существует Pen Constructor (Brush, double).

Другие вопросы по тегам