我有一个简单的解决方案:您可以创建一个更改 Brush 属性并抛出附加属性的类,而不是继承。例如:我创建了一个名为“HatchBrushes”的类,它可以创建 55 个具有不同阴影样式的 DrawingBrushes(类似于 WinForms HatchBrush..实际上这部分代码属于另一个程序员) HatchBrushes 类定义了 4 个附加属性,用于控制阴影画笔外观:HatchStyle、Background、Foreground 和 PenThickness。所有这些属性都注册了一个名为“OnHatchChanged”的 PropertyChangedCallBck 子,我可以在其中更改 DrawingBrush 的属性:
Shared Sub OnHatchChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim DBrush = TryCast(d, DrawingBrush)
If DBrush Is Nothing Then Return
Dim B = GetHatchBrush(GetHatchStyle(DBrush), GetBackground(DBrush), GetForeground(DBrush), GetPenThickness(DBrush))
DBrush.Drawing = B.Drawing.CloneCurrentValue
DBrush.Stretch = B.Stretch
DBrush.ViewportUnits = B.ViewportUnits
DBrush.Viewport = B.Viewport
DBrush.TileMode = B.TileMode
End Sub
请注意,“GetHatchBrush”是一个创建具有所需 HatchStyle 的 DrawingBrush 的函数。我不会在这里写它,因为它太长了。
现在,我可以使用带有 simole xaml 代码的 Horizontal-lines Hatch 为窗口的背景着色,如下所示:
<DrawingBrush c:HatchBrushes.HatchStyle="Horizontal"
c:HatchBrushes.Background="Red"
c:HatchBrushes.Foreground="Yellow"
c:HatchBrushes.PenThickness="2"/>