Вот пример, который динамически устанавливает путь к изображению (изображение, находящееся где-то на диске, а не создается как ресурс):
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;
}
Размышления о иконах ...
Сначала подумайте, вы думаете, что свойство Icon может содержать только изображение. Но на самом деле он может содержать что угодно! Я обнаружил это случайно, когда программно попытался установить свойство Image
непосредственно в строку с путем к изображению. В результате получилось не изображение, а фактический текст пути!
Это приводит к тому, что альтернативе не нужно создавать изображение для значка, а вместо этого использовать текст с символьным шрифтом для отображения простого «значка». В следующем примере используется шрифт Wingdings , который содержит символ «floppydisk». Этот символ действительно является символом <
, который имеет особое значение в XAML, поэтому мы должны использовать вместо него закодированную версию <
. Это работает как мечта! Ниже показан символ дискеты в виде значка в пункте меню:
<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save">
<MenuItem.Icon>
<Label VerticalAlignment="Center" HorizontalAlignment="Center" FontFamily="Wingdings"><</Label>
</MenuItem.Icon>
</MenuItem>