3

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

有没有人有更整洁的解决方案?我有点担心如果我在屏幕上创建 1000 个这样的性能/内存会有点开销。

4

1 回答 1

4

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

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

于 2009-02-19T08:40:10.733 回答