我尝试了所有可能的角度来寻找制作自定义画笔的解决方案,从使用 MarkupExtensions 到弄乱 TypeConverter 属性,然后它让我大吃一惊:您只需创建一个基于 DependencyObject 的包装类,创建一个 Brush 类型的 DependencyProperty,实现您的自定义然后绑定到 Brush DependencyProperty。
然后,将自定义画笔放在资源中
<l:CustomBrush x:Key="CustomBrush" Brush="Magenta" />
然后绑定到它:
<Line X1="0" Y1="-5" X2="200" Y2="-5"
Stroke="{Binding Source={StaticResource CustomBrush}, Path=Brush}"
StrokeThickness="12"/>
我认为这比 MarkupExtension 解决方案更好,因为您不能在 Resources 中放置一个,因此每次使用它时都必须重新定义自定义设置。
无论如何,这似乎是从任何 Wpf 对象继承的简单解决方案,并且借助 Bindings 的灵活性,您还可以绑定到包装的 Wpf 对象本身的成员。
这是简单的类:
public class CustomBrush : DependencyObject
{
public CustomBrush()
{
this.Brush = Brushes.Azure;
}
#region Brush DependencyProperty
[BindableAttribute(true)]
public Brush Brush
{
get { return (Brush)GetValue(BrushProperty); }
set { SetValue(BrushProperty, value); }
}
public static readonly DependencyProperty BrushProperty =
DependencyProperty.Register(
"Brush",
typeof(Brush),
typeof(CustomBrush),
new UIPropertyMetadata(null));
#endregion
}