为 GeometryDrawing 定义样式

Defining style for GeometryDrawing

请不要将其标记为重复。链接的问题与我要问的完全不同。

我需要为大约 180 多个 GeometryDrawing 对象设置 PenBrush 属性。我的第一个想法是为它使用 Style,但我了解到 Style 不能以 GeometryDrawing 为目标,因为它没有继承自 FrameworkElement。然后我考虑创建自己的 GeometryDrawing2 继承自 GeometryDrawing 并在构造函数中设置 PenBrush,但发现 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 对象设置 BrushPen 以说 RedBlack。 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>

然后当您想要显示其中之一时,只需使用 ContentControlContentPresenter。例如:

<ContentControl Content="{StaticResource geometry1}"/>