【发布时间】:2012-01-28 20:51:10
【问题描述】:
没有一个叫Pens,这是肯定的,但是找不到它太奇怪了。是真的没有,还是我瞎了?
(我只是在寻找一个方便的类 - 例如,Colors.Red 和 Brushes.Red 在那里,但对于钢笔来说,最短的似乎是 new Pen(Brushes.Red, 1))
【问题讨论】:
没有一个叫Pens,这是肯定的,但是找不到它太奇怪了。是真的没有,还是我瞎了?
(我只是在寻找一个方便的类 - 例如,Colors.Red 和 Brushes.Red 在那里,但对于钢笔来说,最短的似乎是 new Pen(Brushes.Red, 1))
【问题讨论】:
没有关联的Pens 类,因为Pen 由Brush and a Thickness 标识,而不仅仅是一个属性。
如果您需要一套标准笔(基于某些粗细),那么您必须自己制作。另一种方法是创建一个代码生成器来提供适当的笔。
这是一个为每个默认Brush 添加Pen 的类的示例:
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 也有些多余。 )
为什么?好吧,想想一支笔是什么:它的属性可以用笔画(或:thickness)和颜色(或:brush)来描述。因此,有一个Pen Constructor(Brush, double)。
【讨论】: