2011-02-02 46 views
5

我想在xaml中放置一些图标。这些图标是这样的一个多边形:可重复使用的多边形

<Polygon Points="0,0 20,50, 0,50 20,0" Fill="Red" Stretch="Uniform"/> 

但我想用一个图标几次,所以我要在资源定义它,并通过引用到画布在某个位置包括它,好歹这样:

<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> 

我发现了一个可能的解决方案上http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx在多边形存储在绘画图像,但似乎是开销很大。

有人有一个更好的主意如何解决这个问题?

回答

7

可能最明显和最灵活的方法是创建一个UserControl。您可以从解决方案资源管理器中添加一个新的UserControl类型的文件,将您的Polygon添加到Visual Studio将创建的'LayoutRoot'Grid中。然后,您可以根据您的用户控件创建尽可能多的实例!

但是,检查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> 

请参阅以下内容:

+0

我已经想到了这一点,但我认为,必须有开销更少更简单的解决方案。它只有一个小小的多边形。 – SpeziFish 2011-02-02 08:46:44

相关问题