Сначала вы подумали, что свойство Icon может содержать только изображение. Но на самом деле он может содержать что угодно! Я обнаружил это случайно, когда программно попытался установить свойство Image непосредственно в строку с путем к изображению. В результате он показал не изображение, а фактический текст пути! Затем я обнаружил, что сначала нужно создать элемент Image и установить для него свойство Icon. Это привело меня к мысли, что свойство Image было просто любым контейнером содержимого, который расположен в области значков слева в меню, и я был прав. Я попытался поставить кнопку там, и это сработало!
Это показывает кнопку с текстом «i» в области значков пункта меню. Когда вы нажимаете на кнопку, событие Button_Click запускается (LanguageMenu_Click НЕ запускается при нажатии кнопки).
<MenuItem Name="LanguageMenu" Header="_Language" Click="LanguageMenu_Click">
<MenuItem.Icon>
<Button Click="Button_Click">i</Button>
</MenuItem.Icon>
</MenuItem>
Это приводит к тому, что альтернативе не нужно создавать изображение для значка, а вместо этого использовать текст с символьным шрифтом для отображения простого «значка». В следующем примере используется шрифт Wingdings, который содержит символ floppydisk. Этот символ в шрифте сопоставляется с символом <
, который имеет особое значение в XAML, поэтому мы должны использовать вместо этого закодированную версию <
. Это работает как мечта! Ниже показан символ дискеты в виде значка в пункте меню:
<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save">
<MenuItem.Icon>
<Label VerticalAlignment="Center" HorizontalAlignment="Center"
FontFamily="Wingdings"><</Label>
</MenuItem.Icon>
</MenuItem>