可重复使用的多边形

Spe*_*ish 5 wpf resources xaml templates polygon

我希望在xaml中有一个画布,我放置一些图标.这些图标是像这样的多边形:

<Polygon Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
Run Code Online (Sandbox Code Playgroud)

但是我想多次使用一个图标,所以我想在资源中定义它并通过引用将它包含在某个位置的画布中,如下所示:

<Page.Resources>
   <Polygon Key="icon1" Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
   <Polygon Key="icon2" Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/>
   ...
</Page.Resources>    
<Canvas>
   <Polygon Reference="icon1" X="0" Y="0"/>
   <Polygon Reference="icon2" X="10" Y="10"/>   
   <Polygon Reference="icon1" X="20" Y="20"/>   
   ...          
</Canvas>
Run Code Online (Sandbox Code Playgroud)

我在http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx 上找到了一个可能的解决方案,其中多边形存储在绘图图像中,但似乎需要很多开销.

有人有更好的想法如何解决这个问题?

Col*_*inE 7

可能最明显和最灵活的方法是创建UserControl.您可以从解决方案资源管理器中添加UserControl类型的新文件,将Polygon添加到Visual Studio将创建的"LayoutRoot"网格中.然后,您可以根据自己的用户控件创建任意数量的实例!

但是,检查SO上的类似问题,你可以使用内容控件来渲染多边形,注意,你必须使用x:Shared ="false"来确保你不是每次都试图重复使用相同的多边形.

<Page.Resources>
   <Polygon x:Key="icon1"  x:Shared="False"
            Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/>
   <Polygon x:Key="icon2"  x:Shared="False"
            Points="0,0 10,30, 10,60 20,0" Fill="Blue" Stretch="Uniform"/>
   ...
</Page.Resources>    
<Canvas>
    <ContentControl Content="{StaticResource icon1}" Canvas.Top="0" Canvas.Left="0"/>
    <ContentControl Content="{StaticResource icon2}" Canvas.Top="0" Canvas.Left="10"/>
    <ContentControl Content="{StaticResource icon1}" Canvas.Top="0" Canvas.Left="20"/>
   ...          
</Canvas>
Run Code Online (Sandbox Code Playgroud)

请参阅以下内容:

矢量图像作为可重复使用的XAML片段