Je souhaite réutiliser un fragment XAML en tant qu'image dans une application/bibliothèque WPF.Image vectorielle en tant que fragment XAML réutilisable
Le fond du problème est le suivant:
Il est facile de réutiliser une image bitmap dans une application WPF. L'image peut être ajoutée en tant que ressource, je peux utiliser <Image Source="packURI"/>
à de nombreux endroits dans XAML afin que l'image soit la même.
Mais j'aimerais avoir la possibilité de faire la même chose pour une image vectorielle. L'image elle-même peut être représentée comme Path
, mais je ne peux pas réutiliser la même Path
comme ressource, car il est interdit de l'utiliser à plusieurs endroits différents (et éventuellement à partir de plusieurs threads d'interface utilisateur) (l'élément UI ne peut avoir qu'un seul parent logique).
En outre, la question devient plus compliquée si je voudrais construire le "image" à partir de plusieurs Path
s, utilisez un Canvas
pour cela. Ou un code XAML arbitraire.
J'ai essayé d'utiliser un Style
pour la Path
, de sorte que l'image est représentée de manière:
<Path Style={StaticResource VectorImage1}/>
Cela semble être un moyen réutilisable, mais je suis préoccupé par deux problèmes:
- Si l'implémentation d'une image vectorielle passe de
Path
à (par exemple)Canvas
, je devrai le remplacer non seulement dans le style, mais partout dans le code source qui l'utilise. - La définition d'un chemin utilisant un style semble être trop verbeuse.
- Je ne vois aucun moyen de généraliser cette approche pour l'utilisation
Canvas
ou un code XAML arbitraire. - La syntaxe semble être plutôt artificielle.
Il y a d'autre moyen d'avoir un fragment de XAML réutilisable, en définissant un UserControl
, mais la définition d'un contrôle utilisateur distinct pour chaque image vectorielle semble être un surpuissant.
Existe-t-il une meilleure façon de définir un fragment XAML réutilisable?
J'ai essayé d'utiliser votre suggestion, mais à l'exécution, je reçois une exception: "Attribut partagé dans l'espace de noms" http: //schemas.microsoft.com/winfx/2006/xaml 'peut être utilisé uniquement dans les dictionnaires de ressources compilés. " J'ai déplacé 'MyVectorImage' dans un dictionnaire de ressources XAML séparé, mais j'ai le même message d'erreur lorsque j'inclue ce dictionnaire dans les Dictionnaires Merged de Windows. – Vlad
@ Vlad @ J'ai mis à jour mon exemple. Si vous avez essayé l'exemple avec le StackPanel, j'avais oublié de déplacer l'attribut x: Shared vers le StackPanel. –
Je vois, ma mauvaise, j'aurais dû essayer de comprendre lire ce que le message dit exactement. Avec x: Partagé uniquement au niveau supérieur, cela fonctionne. – Vlad