Hier ein Beispiel, bei dem der Bildpfad dynamisch festgelegt wird (das Bild befindet sich irgendwo auf dem Datenträger und wird nicht als Ressource erstellt):
if (File.Exists(imagePath))
{
// Create image element to set as icon on the menu element
Image icon = new Image();
BitmapImage bmImage = new BitmapImage();
bmImage.BeginInit();
bmImage.UriSource = new Uri(imagePath, UriKind.Absolute);
bmImage.EndInit();
icon.Source = bmImage;
icon.MaxWidth = 25;
item.Icon = icon;
}
Überlegungen zu Ikonen...
Auf den ersten Blick würde man denken, dass die Eigenschaft Icon nur ein Bild enthalten kann. Aber sie kann eigentlich alles enthalten! Ich entdeckte dies zufällig, als ich programmatisch versuchte, die Eigenschaft Image
Eigenschaft direkt in eine Zeichenkette mit dem Pfad zu einem Bild. Das Ergebnis war, dass nicht das Bild, sondern der tatsächliche Text des Pfades angezeigt wurde!
Daraus ergibt sich die Alternative, kein Bild für das Symbol zu erstellen, sondern stattdessen Text mit einer Symbolschrift zu verwenden, um ein einfaches "Symbol" anzuzeigen. Das folgende Beispiel verwendet die Schriftart Wingdings die ein "Floppydisk"-Symbol enthält. Dieses Symbol ist in Wirklichkeit das Zeichen <
die in XAML eine besondere Bedeutung hat, so dass wir die kodierte Version verwenden müssen <
stattdessen. Das funktioniert wie ein Traum! Die folgende Abbildung zeigt ein Floppydisk-Symbol als Symbol für den Menüpunkt:
<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save">
<MenuItem.Icon>
<Label VerticalAlignment="Center" HorizontalAlignment="Center" FontFamily="Wingdings"><</Label>
</MenuItem.Icon>
</MenuItem>