为 GeometryDrawing 定义样式
Defining style for GeometryDrawing
请不要将其标记为重复。链接的问题与我要问的完全不同。
我需要为大约 180 多个 GeometryDrawing
对象设置 Pen
和 Brush
属性。我的第一个想法是为它使用 Style
,但我了解到 Style
不能以 GeometryDrawing
为目标,因为它没有继承自 FrameworkElement
。然后我考虑创建自己的 GeometryDrawing2
继承自 GeometryDrawing
并在构造函数中设置 Pen
和 Brush
,但发现 GeometryDrawing
是密封的,不能被继承。
除了将属性复制粘贴 180 次之外,实现我想要的效果的最佳方法是什么?
编辑
这是我的画集:
<ResourceDictionary>
<DrawingImage x:Key="Drawing1">
<DrawingImage.Drawing>
<GeometryDrawing Geometry="..." />
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Drawing2">
<DrawingImage.Drawing>
<GeometryDrawing Geometry="..." />
</DrawingImage.Drawing>
</DrawingImage>
<!--180 more such drawings-->
</ResourceDictionary>
我需要为每个 GeometryDrawing
对象设置 Brush
和 Pen
以说 Red
和 Black
。 XAML 中通常的干净方法是通过 Style
执行此操作,但正如我上面解释的那样,这不适用于 GeometryDrawing
。唯一的其他方法是将 Brush="{StaticResource MyBrush}"
和 Pen="{StaticResource MyPen}"
复制粘贴到 180 多个 GeometryDrawing
对象中的每一个。或者有更快的(XAML-only)方式吗?
您的问题仍然不完整,缺少一个好的 Minimal, Complete, and Verifiable code example 来处理。但是,根据您目前提供的信息,我希望基于模板的实现能够解决您的问题。例如:
<ResourceDictionary>
<PathGeometry x:Key="geometry1">...</PathGeometry>
<PathGeometry x:Key="geometry2">...</PathGeometry>
<!-- etc. -->
<DataTemplate DataType="{x:Type PathGeometry}">
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Geometry="{Binding}" Pen="..." Brush="..."/>
</DrawingImage.Drawing>
</DrawingImage>
</DataTemplate>
</ResourceDictionary>
然后当您想要显示其中之一时,只需使用 ContentControl
或 ContentPresenter
。例如:
<ContentControl Content="{StaticResource geometry1}"/>
请不要将其标记为重复。链接的问题与我要问的完全不同。
我需要为大约 180 多个 GeometryDrawing
对象设置 Pen
和 Brush
属性。我的第一个想法是为它使用 Style
,但我了解到 Style
不能以 GeometryDrawing
为目标,因为它没有继承自 FrameworkElement
。然后我考虑创建自己的 GeometryDrawing2
继承自 GeometryDrawing
并在构造函数中设置 Pen
和 Brush
,但发现 GeometryDrawing
是密封的,不能被继承。
除了将属性复制粘贴 180 次之外,实现我想要的效果的最佳方法是什么?
编辑
这是我的画集:
<ResourceDictionary>
<DrawingImage x:Key="Drawing1">
<DrawingImage.Drawing>
<GeometryDrawing Geometry="..." />
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Drawing2">
<DrawingImage.Drawing>
<GeometryDrawing Geometry="..." />
</DrawingImage.Drawing>
</DrawingImage>
<!--180 more such drawings-->
</ResourceDictionary>
我需要为每个 GeometryDrawing
对象设置 Brush
和 Pen
以说 Red
和 Black
。 XAML 中通常的干净方法是通过 Style
执行此操作,但正如我上面解释的那样,这不适用于 GeometryDrawing
。唯一的其他方法是将 Brush="{StaticResource MyBrush}"
和 Pen="{StaticResource MyPen}"
复制粘贴到 180 多个 GeometryDrawing
对象中的每一个。或者有更快的(XAML-only)方式吗?
您的问题仍然不完整,缺少一个好的 Minimal, Complete, and Verifiable code example 来处理。但是,根据您目前提供的信息,我希望基于模板的实现能够解决您的问题。例如:
<ResourceDictionary>
<PathGeometry x:Key="geometry1">...</PathGeometry>
<PathGeometry x:Key="geometry2">...</PathGeometry>
<!-- etc. -->
<DataTemplate DataType="{x:Type PathGeometry}">
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Geometry="{Binding}" Pen="..." Brush="..."/>
</DrawingImage.Drawing>
</DrawingImage>
</DataTemplate>
</ResourceDictionary>
然后当您想要显示其中之一时,只需使用 ContentControl
或 ContentPresenter
。例如:
<ContentControl Content="{StaticResource geometry1}"/>