English 中文(简体)
一个轻量级可模板化的WPF形状
原标题:
  • 时间:2009-02-19 08:33:22
  •  标签:

我正在使用椭圆和其他形状作为屏幕标记,我希望其他人能够使用模板更改这些视觉效果。然而,由于形状不支持模板化,我被迫创建一个基本UserControl,默认情况下显示椭圆,然后使用它而不是基本形状。

有没有更简洁的解决方案?如果我在屏幕上创建1000个这样的对象,我会有点担心性能/内存会有些超负荷。

最佳回答

UserControlContentControl 继承而来。看起来您并不需要内容(即在形状内部托管其他控件的能力),因此我会继续向上追溯继承关系...

以下是祖先的分析:

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是一种轻量级的绘画类,用于呈现形状、图像或文本。这个类被认为是轻量级的,因为它不提供布局或事件处理,这提高了它的性能。

它也不是可模板化的,但如果您需要原始性能,那么它值得一看。

问题回答

暂无回答




相关问题
热门标签