Есть ли класс "Ручки" для дополнения "Кисти" и "Цвета" в 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).