Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a "Pens" class to complement "Brushes" and "Colors" in WPF?

There isn't one called Pens, that's for sure, but it's too odd not to find it. Is it really absent, or am I being blind?

(I'm just looking for a convenience class - for example, Colors.Red and Brushes.Red is there, but for pens the shortest appears to be new Pen(Brushes.Red, 1))

like image 487
Roman Starkov Avatar asked Dec 28 '11 01:12

Roman Starkov


2 Answers

There is not the associated Pens class because a Pen is identified by both a Brush and a Thickness rather than just one property.

If you have a need for a set of standard pens (based on some thickness) then you will have to create your own. Another approach would be to create a code generator to supply the appropriate pens.

Here is an example of a class which adds a Pen for each default 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;
    }
}
like image 160
user7116 Avatar answered Oct 06 '22 03:10

user7116


There is no Pens class since it would be redundant. (Although you're right: Colors and Brushes are somewhat redundant, too.)

Why? Well, just think about waht a pen is: its properties can be described by a stroke with (or: thickness) and a color (or: brush). Therefore, there is a Pen Constructor(Brush, double).

like image 21
Marius Schulz Avatar answered Oct 06 '22 04:10

Marius Schulz