wpfcolorsbrushes

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))


Solution

  • 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;
        }
    }