我使用椭圆和其他形状作为屏幕标记,我希望其他人能够使用模板更改这些视觉效果。但是,由于形状不支持模板,我不得不创建一个基本的 UserControl,它默认显示一个椭圆,然后使用它而不是基本形状。
有没有人有更整洁的解决方案?我有点担心如果我在屏幕上创建 1000 个这样的性能/内存会有点开销。
UserControl
源自ContentControl
。听起来好像您不需要内容(在形状内托管其他控件的能力),所以我会继续提升层次结构......
以下是血统分析:
UserControl
ContentControl
Control
FrameworkElement
UIElement
Visual
...
Control
定义Template
属性,所以我认为实现你想要的最简单的方法是使用Control
:
<Control Style="{StaticResource MyStyle}"/>
...并使用 aStyle
设置您需要的模板和任何触发器/等。
但是,如果您确实需要在形状内托管子元素,则应该ContentControl
这样使用:
<ContentControl Style="{StaticResource MyStyle}"/>
如果您发现这种方法在运行时过于繁重,那么您可以考虑使用Shape。
Shape
FrameworkElement
UIElement
Visual
...
Shape
不继承自Control
,而是直接继承自FrameworkElement
。它不可模板化。它是一个抽象类,您需要创建自己的自定义子类,该子类知道如何通过DefiningGeometry
属性描述自己的表示。这可能比在 a 上定义样式更复杂Control
,但是如果您需要额外的性能,那么您可能必须走这条路。
编辑您可能还想查看DrawingVisual。来自 MSDN:
DrawingVisual 是一个轻量级的绘图类,用于呈现形状、图像或文本。这个类被认为是轻量级的,因为它不提供布局或事件处理,从而提高了它的性能。
它也不是可模板化的,但如果您需要原始性能,那么值得一看。