2011-02-02 19 views
5

Quiero tener un lienzo en xaml donde coloque algunos iconos. Estos iconos son polígonos como éste:Polígono reutilizable

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

Pero quiero usar un icono varias veces, por lo que quiero definirlo en los recursos y la incluyen como referencia en el lienzo en una posición determinada, de alguna manera como esto :

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

he encontrado una posible solución en http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx donde se almacenan los polígonos imagen en un dibujo, pero parece ser que muchos gastos.

Alguien tiene una mejor idea de cómo solucionar esto?

Respuesta

7

Probablemente el método más obvio y flexible es crear un UserControl. Puede agregar un nuevo archivo de tipo UserControl desde el explorador de soluciones, agregue su polígono a la cuadrícula 'LayoutRoot' que Visual Studio creará. ¡Luego puede crear tantas instancias como desee de su control de usuario!

Sin embargo, al buscar problemas similares en SO, puede usar un control de contenido para representar el polígono, tenga en cuenta que debe usar x: Shared = "false" para asegurarse de que no está tratando de volver a utilizar el mismo polígono cada vez.

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

ver lo siguiente:

+0

ya pensé en esto, pero creo, tiene que haber una solución más fácil con menos sobrecarga. Es solo un pequeño polígono. – SpeziFish

+0

Vea mi respuesta actualizada - ¡Espero que esto ayude! – ColinE

+0

Guau, muy bonito, exactamente lo que estaba buscando, gracias! – SpeziFish