假设我有一个DrawingBrush,它有三种硬编码颜色,即边框、前景和背景。

<!-- Resource -->
<DrawingBrush x:Key="EventIcon" Stretch="Uniform">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="#FF9200CE" Geometry="F1 M 51.2119,61.4688L 43.4193,61.4688L 43.4194,29.318L 27.8341,29.318L 27.834,61.4688L 20.0414,61.4688L 35.6267,77.1353L 51.2119,61.4688 Z "/>
<GeometryDrawing Brush="#FFB400FF" Geometry="F1 M 44.4789,64.2014L 40.2667,64.2667L 40.13,29.318L 27.8341,29.318L 27.834,61.4688L 20.0414,61.4688L 33.8667,75.1467L 44.4789,64.2014 Z "/>
<GeometryDrawing Geometry="F1 M 51.2119,61.4688L 43.4193,61.4688L 43.4194,29.318L 27.8341,29.318L 27.834,61.4688L 20.0414,61.4688L 35.6267,77.1353L 51.2119,61.4688 Z ">
<GeometryDrawing.Pen>
<Pen Thickness="2" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" Brush="#FF3D0033"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FFFFFFFF" Geometry="F1 M 33.7559,53.2538L 32.6202,40.9989L 32.6202,35.3362L 37.3531,35.3362L 37.3531,40.9989L 36.2333,53.2538L 33.7559,53.2538 Z M 32.6202,59.6771L 32.6202,54.9442L 37.3531,54.9442L 37.3531,59.6771L 32.6202,59.6771 Z "/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<!-- Usage -->
<Rectangle Width="16" Height="16" Fill="{StaticResource EventIcon}" />问题
什么是最好的方法,能够改变这些颜色从父Rectangle,但仍然有一个默认的退路?
当我写这个问题的时候,我想到了两种可能的解决方案.
可能的解决方案#1
但是,使用RelativeSource绑定将每个绑定连接到它们的等效属性,例如{Binding Path=BorderBrush, RelativeSource={RelativeSource AncestorType={x:type Rectangle}}:
Rectangle是一个Shape,不具有BorderBrush属性;FallbackValue将不能工作,因为绑定将解析并接受它的默认值。(编辑:,当我写这篇文章时,我想我可以使用NullValue属性)。可能的解决方案#2
编写一个附加属性,该属性接受颜色/画笔数组,然后有一个转换器将其映射到GeometryDrawing.Brush。使用Binding.IsNull属性提供一个默认值,因为如果附加属性为null或该颜色未被重新映射,则它将返回空值。
发布于 2012-03-27 10:08:07
我将使用动态资源引用,在应用程序级别(Application.Resources)定义默认值,并通过在某些控件的资源中添加具有相同键的画笔在本地更改它们。
发布于 2012-03-27 10:04:58
您可以为这三种颜色中的每一种创建附加属性,然后创建默认样式,为它们提供默认值。
然后,如果需要使用普通附加属性语法,则可以在Rectangle声明中覆盖这些值。
我能想到的唯一其他方法是将颜色作为静态资源,如果您想重写,可以在Rectangle的资源字典中重新创建这些颜色。
https://stackoverflow.com/questions/9886869
复制相似问题