2011-02-02 5 views
5

Je veux avoir une toile en xaml où je place quelques icônes. Ces icônes sont des polygones comme celui-ci:Polygone réutilisable

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

Mais je veux utiliser une icône à plusieurs reprises, donc je veux définir les ressources et l'inclure par renvoi dans la toile à une certaine position, someway comme celui-ci :

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

J'ai trouvé une solution sur http://www.codeproject.com/KB/WPF/GraphicInXAMLAndWPF.aspx où les polygones sont stockés dans une image de dessin, mais semble être à de frais généraux.

Quelqu'un a une meilleure idée de comment résoudre ce problème?

Répondre

7

La méthode la plus évidente et la plus flexible est probablement de créer un UserControl. Vous pouvez ajouter un nouveau fichier de type UserControl depuis l'explorateur de solution, ajoutez votre Polygone à la grille 'LayoutRoot' que Visual Studio va créer. Vous pouvez ensuite créer autant d'instances que vous le souhaitez de votre contrôle utilisateur! Toutefois, en recherchant des problèmes similaires sur SO, vous pouvez utiliser un contrôle de contenu pour rendre le polygone, notez que vous devrez utiliser x: Shared = "false" pour vous assurer que vous n'essayez pas de réutiliser le polygone. même polygone à chaque fois.

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

Voir les éléments suivants:

+0

je l'ai déjà pensé à cela, mais je pense, il doit y avoir une solution plus facile avec moins de frais généraux. C'est seulement un minuscule polygone. – SpeziFish

+0

Voir ma mise à jour - espérons que cela aide! – ColinE

+0

Wow, très bien, exactement ce que je cherchais, merci! – SpeziFish