Есть ли класс "Ручки" для дополнения "Кисти" и "Цвета" в WPF? - PullRequest
5 голосов
/ 28 декабря 2011

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

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

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

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

1 голос
/ 28 декабря 2011

Не существует связанного класса 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;
    }
}
...