2011-08-19 2 views
0

j'ai créé une forme qui se trouve dans la toile Element:C# WPF Problème avec la construction Formes

<Canvas HorizontalAlignment="Left" Width="47" Height="71"> 
    <Polygon Points="25 0 10 43 40 43" Stroke="Black" Fill="Orange" Height="45" Canvas.Left="0" Canvas.Bottom="0" Width="47"></Polygon> 
      <Ellipse Height="20" Width="20" Stroke="Black" Fill="Black" Canvas.Bottom="45" Canvas.Left="15"></Ellipse> 
    </Canvas> 

Et je quand je clique sur le bouton, il devrait créer un tel élément dans un autre conteneur Canvas!

Comment est-ce que je pourrais réutiliser cette forme construite plusieurs fois dans mon code sans écrire plus d'une fois dans XAML?

J'ai lu quelque chose sur les modèles et les styles. Mais je ne pouvais pas vraiment l'adepte de mon problème. Parce que je veux créer ces formes à l'exécution.

+0

Est-ce que la forme existe toujours un polygone et une ellipse, seulement avec des valeurs différentes? – 321X

+0

Le toujours existe et a toujours les mêmes valeurs! Je veux seulement les insérer dans ma toile existante à l'exécution. (Plusieurs fois !!) – michaelt

Répondre

0

vous pouvez déclarer la Polygon dans les ressources comme celui-ci

<Window.Resources> 
     <Polygon x:Key = "Poly" Points="25 0 10 43 40 43" Stroke="Black" Fill="Orange" Height="45" Canvas.Left="0" Canvas.Bottom="0" Width="47"/> 
</Window.Resources> 

Ensuite, vous pouvez l'utiliser comme ceci

<ContentControl Content="{StaticResource Poly}"/> 

vous pouvez même faire

<Window.Resources> 
    <Canvas HorizontalAlignment="Left" Width="47" Height="71" x:Key="MyShape"> 
     <Polygon Points="25 0 10 43 40 43" Stroke="Black" Fill="Orange" Height="45" Canvas.Left="0" Canvas.Bottom="0" Width="47"></Polygon> 
     <Ellipse Height="20" Width="20" Stroke="Black" Fill="Black" Canvas.Bottom="45" Canvas.Left="15"></Ellipse> 
    </Canvas> 
</Window.Resources> 

<ContentControl Content="{StaticResource MyShape}"/> 
+0

Comment est-ce que je peux ajouter ce contrôle avec la ressource dans le code derrière le dossier? – michaelt

+0

Dans le code derrière vous pouvez accéder à cette ressource via 'FindResource (" MyShape ")' –

+0

J'ai essayé ceci: Canvas myCanvas = new Canvas(); myCanvas = FindResource ("MyShape") en canevas; myBaseCanvas.Children (myCanvas); Mais je crée une forme et à la deuxième fois j'obtiens l'erreur: Que l'élément est déjà sous l'élément de toile! – michaelt