2009-02-19 53 views
3

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

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

+0

您是否得到了这个工作?你可以提供你的结果的任何细节? – 2009-02-24 14:01:13

回答

3

UserControl派生自ContentControl。它不听起来好像你需要的内容(托管您的形状内的其他控件的能力),所以我会继续上涨的层次......

这里是祖先的细分:

UserControl 
    ContentControl 
     Control 
      FrameworkElement 
       UIElement 
        Visual 
         ... 

Control定义Template属性,所以我想实现的最轻的方式,你想要的是使用Control

<Control Style="{StaticResource MyStyle}"/> 

...并使用Style设置您需要的模板,任何触发器的/ etc 。

然而,如果你确实需要承载您的形状内部的子元素,你应该使用ContentControl这样的:

<ContentControl Style="{StaticResource MyStyle}"/> 

如果发现这种方式过于重量级的在运行,那么你可以考虑使用Shape

Shape 
    FrameworkElement 
     UIElement 
      Visual 
       ... 

Shape不会ControlFrameworkElement继承,而是直接。它不可模版化。这是一个抽象类,您需要创建自己的定制子类,以了解如何通过DefiningGeometry属性描述其自己的演示文稿。这可能比定义Control上的样式更复杂,但如果您需要额外的性能,那么您可能必须走这条路线。

编辑您可能也想看看DrawingVisual以及。来自MSDN:

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

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