Vektorbild als wiederverwendbares XAML-Fragment

8

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:

%Vor%

Dies scheint ein wiederverwendbarer Weg zu sein, aber ich habe zwei Probleme:

  1. Wenn die Implementierung eines Vektorbildes von Path in ein (zum Beispiel) Canvas geändert wird, muss ich es nicht nur im Stil, sondern überall im Quellcode ersetzen, der es verwendet.
  2. Die Definition eines Pfades unter Verwendung eines Stils scheint zu ausführlich zu sein.
  3. Ich sehe keine Möglichkeit, diesen Ansatz für die Verwendung von Canvas oder beliebigem XAML-Code zu verallgemeinern .
  4. Die Syntax scheint ziemlich unnatürlich zu sein.

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?

    
Vlad 08.12.2010, 12:20
quelle

3 Antworten

14

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.

%Vor%

Beispiel. Sie ersetzen "MyVectorImage" durch ein StackPanel mit zwei Pfaden.

%Vor%     
Fredrik Hedblad 08.12.2010, 12:33
quelle
5

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

    
Vlad 09.12.2010 12:22
quelle
3

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. Ссылка

    
Robert Jeppesen 08.12.2010 12:29
quelle

Tags und Links