我正在使用椭圆和其他形状作为屏幕标记,我希望其他人能够使用模板更改这些视觉效果。然而,由于形状不支持模板化,我被迫创建一个基本UserControl,默认情况下显示椭圆,然后使用它而不是基本形状。
有没有更简洁的解决方案?如果我在屏幕上创建1000个这样的对象,我会有点担心性能/内存会有些超负荷。
我正在使用椭圆和其他形状作为屏幕标记,我希望其他人能够使用模板更改这些视觉效果。然而,由于形状不支持模板化,我被迫创建一个基本UserControl,默认情况下显示椭圆,然后使用它而不是基本形状。
有没有更简洁的解决方案?如果我在屏幕上创建1000个这样的对象,我会有点担心性能/内存会有些超负荷。
UserControl
从 ContentControl
继承而来。看起来您并不需要内容(即在形状内部托管其他控件的能力),因此我会继续向上追溯继承关系...
以下是祖先的分析:
UserControl
ContentControl
Control
FrameworkElement
UIElement
Visual
...
Control
定义了 Template
属性,因此我认为实现您要求的最轻量的方式是使用 Control
:
<Control Style="{StaticResource MyStyle}"/>
......并使用Style
来设置模板和您需要的任何触发器等。
然而,如果您需要在形状内托管子元素,则应如下使用 ContentControl
:
<ContentControl Style="{StaticResource MyStyle}"/>
如果您发现这种方式在运行时过于重,可以考虑使用形状。
Shape
FrameworkElement
UIElement
Visual
...
Shape
不继承自Control
,而是直接继承自FrameworkElement
。它无法进行模板化。它是一个抽象类,你需要创建自己的子类,通过DefiningGeometry
属性来描述其自身呈现。这可能比在Control
上定义样式更复杂,但如果您需要额外的性能,则可能必须采用这种方式。
您可能也会喜欢查看DrawingVisual。来自MSDN:
DrawingVisual是一种轻量级的绘画类,用于呈现形状、图像或文本。这个类被认为是轻量级的,因为它不提供布局或事件处理,这提高了它的性能。
它也不是可模板化的,但如果您需要原始性能,那么它值得一看。