Вы создали элемент управления Image
и дважды пытались поместить его в визуальное дерево. Поскольку все элементы управления могут иметь только одного родителя, ваш Image
был отключен. Таким образом, если использовать его второй раз, первый будет отключен, в результате чего ваш значок будет отсутствовать.
Вы можете решить эту проблему, не добавляя Image
, а ImageSource
вместо своих ресурсов:
<BitmapImage x:Key="DeleteIco" UriSource="pack://application:,,,/MyProject.myControl;component/Resources/Delete.ico" />
Ваше меню должно немного измениться, чтобы оно заработало:
<ContextMenu x:Key="MyMenu1">
<MenuItem Header="Delete">
<MenuItem.Icon>
<Image Source="{StaticResource DeleteIco}" Width="16" Height="16"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
<ContextMenu x:Key="MyMenu2">
<MenuItem Header="Delete me">
<MenuItem.Icon>
<Image Source="{StaticResource DeleteIco}" Width="16" Height="16"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
Обновление:
Вы также можете использовать стили для установки некоторых основных свойств Image
для вас
<Style TargetType="Image">
<Setter Property="Width" Value="16"/>
<Setter Property="Width" Value="16"/>
</Style>
Или используйте стиль для MenuItem
, чтобы каждый раз устанавливать Icon
.
<Style TargetType="MenuItem" x:Key="DeleteMenuIcon">
<Setter Property="Icon">
<Setter.Value>
<Image Source="{StaticResource DeleteIco}" Width="16" Height="16"/>
</Setter.Value>
</Setter>
</Style>
И пункт меню:
<MenuItem Header="Delete me" Style="{StaticResource DeleteMenuIcon}" />