Ich möchte ein XAML-Fragment als Bild in einer WPF-Anwendung / Bibliothek wiederverwenden.
Der Hintergrund des Problems ist folgender:
Es ist einfach, ein Bitmap-Bild in einer WPF-Anwendung wiederzuverwenden. Das Bild kann als Ressource hinzugefügt werden, ich kann <Image Source="packURI"/>
an vielen Stellen in XAML verwenden, so dass das Bild dasselbe ist.
Aber ich hätte gerne die Möglichkeit, das gleiche für ein Vektorbild zu tun. Das Bild selbst kann als Path
dargestellt werden, aber ich kann das gleiche Path
nicht als Ressource verwenden, weil es einfach an mehreren verschiedenen Stellen (und möglicherweise von mehreren UI-Threads) zu verwenden ist (das UI-Element kann nur eine logische haben) Eltern).
Außerdem wird die Frage komplizierter, wenn ich das "Bild" von mehreren Path
s erstellen möchte, verwenden Sie dafür ein Canvas
. Oder irgendein beliebiger XAML-Code.
Ich habe versucht, ein Style
für Path
zu verwenden, damit das Bild so dargestellt wird:
Dies scheint ein wiederverwendbarer Weg zu sein, aber ich habe zwei Probleme:
Path
in ein (zum Beispiel) Canvas
geändert wird, muss ich es nicht nur im Stil, sondern überall im Quellcode ersetzen, der es verwendet. Canvas
oder beliebigem XAML-Code zu verallgemeinern . Es gibt eine andere Möglichkeit, ein wiederverwendbares XAML-Fragment zu haben, indem Sie UserControl
definieren, aber das Definieren eines separaten Benutzersteuerelements für jedes Vektorbild scheint ein Overkill zu sein.
Gibt es einen besseren, netten, richtigen Weg, um ein wiederverwendbares XAML-Fragment zu definieren?
Sie können das x: Shared-Attribut zur Pfadressource hinzufügen und es als StaticResource verwenden. Dies funktioniert, wenn "MyVectorImage" zu etwas anderem wechselt
Aktualisieren
Wahrscheinlich ist es besser, ein ContentControl oder ähnliches zu verwenden, um Eigenschaften wie Margin etc. Hinzuzufügen.
Beispiel. Sie ersetzen "MyVectorImage" durch ein StackPanel mit zwei Pfaden.
%Vor% Nach einigen Nachforschungen gibt es eine weitere Option: Verwenden Sie eine DrawingImage
als Source
für ein Bild. Die übliche Bildquelle ist jedoch eine BitmapSource
kann auch "Vektorgrafiken" sein.
Hier ist ein Beispiel :
%Vor%
erzeugt so ein schönes Vektorbild:
Eine weitere Option könnte die Verwendung von DrawingBrush
sein, wie in dieser SO Frage: Wie speichern und rufen Sie mehrere Formen in XAML / WPF ab? .
Sie können den Pfad in einem Ressourcenwörterbuch speichern und x: Shared auf false setzen:
%Vor%Dies weist WPF an, jedes Mal, wenn es angefordert wird, eine neue Instanz zu erstellen. Ссылка