2009-07-23 7 views
2

J'ai une ressource définie dans mon fichier XAML comme suit:Comment cloner une ressource de chemin dans Silverlight?

<Path x:Key="myPath" 
    Data="M14.773241,18.080208 C12.373256,18.080208 10.239936,19.30687 10.239936,27.573483 
    L10.239936,36.106766 C10.239936,45.440037 12.586588,46.506699 14.986573,46.506699 
    C18.613216,46.506699 19.359879,42.400059 19.359879,35.3601 L19.359879,27.733482 
    C19.359879,20.05353 17.386559,18.080208 14.773241,18.080208 z M14.879907,11.786915 
    C17.973221,11.786915 22.293194,13.013573 24.906511,17.920212 C26.773167,21.386856 
    27.519829,27.093487 27.519829,32.213455 C27.519829,34.506775 27.306496,41.706726 
    24.906511,46.453365 C23.626518,49.013351 20.906536,52.799992 15.199905,52.799992 
    C2.1333201,52.799992 2.1333201,37.600086 2.1333201,32.160122 C2.1333201,28.05348 
    2.1333201,22.666847 4.4266391,18.453541 C5.8666301,15.840225 8.639946,11.786915 
    14.879907,11.786915 z" 
/> 

Je veux pouvoir ajouter plusieurs « instances » de ce chemin (et plusieurs autres) à un StackPanel. Bien sûr, je ne peux pas simplement ajouter "myPath" au panneau puisque c'est déjà un enfant d'un autre conteneur.

Cependant, je ne peux pas sembler être capable de cloner le chemin non plus. J'ai essayé:

Path clone = new Path() 
{ 
    Data = source.Data 
}; 

Mais pas de chance ... exception à propos de la valeur étant en dehors de la fourchette attendue. Enfin, j'ai essayé de creuser dans source.Data (un PathGeometry), mais il ne contient pas de PathFigures ... Je ne sais pas pourquoi, puisque le chemin rend si je le copie de la section des ressources directement à un panneau.

Ce qui donne?

Merci, Sergio

Répondre

11

Mettez les données de chemin dans une ressource de chaîne:

<Page.Resources> 
    <system:String x:Key="PathData"> 
    M14.773241,18.080208 C12.373256,18.080208 10.239936,19.30687 10.239936,27.573483 
    L10.239936,36.106766 C10.239936,45.440037 12.586588,46.506699 14.986573,46.506699 
    C18.613216,46.506699 19.359879,42.400059 19.359879,35.3601 L19.359879,27.733482 
    C19.359879,20.05353 17.386559,18.080208 14.773241,18.080208 z M14.879907,11.786915 
    C17.973221,11.786915 22.293194,13.013573 24.906511,17.920212 C26.773167,21.386856 
    27.519829,27.093487 27.519829,32.213455 C27.519829,34.506775 27.306496,41.706726 
    24.906511,46.453365 C23.626518,49.013351 20.906536,52.799992 15.199905,52.799992 
    C2.1333201,52.799992 2.1333201,37.600086 2.1333201,32.160122 C2.1333201,28.05348 
    2.1333201,22.666847 4.4266391,18.453541 C5.8666301,15.840225 8.639946,11.786915 
    14.879907,11.786915 z 
    </system:String> 
</Page.Resources> 

Et pour l'utiliser:

<Path x:Name="Path1" Data="{StaticResource PathData}" Fill="Blue" ... /> 
<Path x:Name="Path2" Data="{StaticResource PathData}" Fill="Red" ... /> 

Vous en aurez besoin dans votre déclaration XAML:

xmlns:system="clr-namespace:System;assembly=mscorlib" 

Si vous voulez créer des chemins par programmation d'une chaîne de chemin commun, Silverlight manque un peu de fonctionnalités clés que WPF a - donc vous devez kludge il:

string pathXaml = 
@"<Path xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
     xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
     Data=""path_data_goes_here"" />"; 
Path path = (Path)System.Windows.Markup.XamlReader.Load(pathXaml); 
+0

Pouvez-vous définir la propriété des données en utilisant programatically que technique? – SergioL

+0

Mis à jour avec une méthode pour faire ce dont vous avez besoin. –

+0

Cela a fait l'affaire ... Je vois une autre section à écrire dans mon livre blanc WPF v. Silverlight. :-) – SergioL

Questions connexes