Почему я не могу использовать один и тот же значок для более чем одного элемента в меню? - PullRequest
3 голосов
/ 29 ноября 2010

У меня есть MenuItem, как показано ниже

<MenuItem Header="Edit">
    <MenuItem Header="Copy Direct Link" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageCommand}" />
    <MenuItem Header="Copy Image Data" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageDataCommand}" />
    <MenuItem Header="Paste" Icon="{StaticResource PasteIcon}" Command="{Binding PasteImageCommand}" />
</MenuItem>

Обратите внимание, что первые 2 элемента используют один и тот же значок, я получаю что-то вроде ниже

Я пытался удалить 2-й элемент,

<MenuItem Header="Edit">
    <MenuItem Header="Copy Direct Link" InputGestureText="Ctrl+C" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageCommand}" />
    <!--<MenuItem Header="Copy Image Data" InputGestureText="Ctrl+Alt+C" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageDataCommand}" />-->
    <MenuItem Header="Paste" InputGestureText="Ctrl+P" Icon="{StaticResource PasteIcon}" Command="{Binding PasteImageCommand}" />
</MenuItem>

, затем я получил что-то вроде

Как я могу использовать иконки?

Ответы [ 3 ]

8 голосов
/ 29 ноября 2010

См. этот вопрос

Изображение может иметь только одного родителя, поэтому оно будет перемещено из первого элемента MenuItem во второй. Вы можете добавить атрибут x: Shared следующим образом:

<Window.Resources>
    <Image x:Key="CopyIcon" x:Shared="False" Source="..." />
</Window.Resources>

С MSDN

x: общий атрибут
При значении false изменяет WPF поведение поиска ресурсов, так что запросы на приписанный ресурс создать новый экземпляр для каждого запроса вместо того, чтобы делить один и тот же экземпляр для всех запросов.

4 голосов
/ 30 ноября 2010

Скорее всего, вы объявляете CopyIcon как тип изображения в вашем ресурсе, что-то вроде этого:

<Window.Resources>
  <Image x:Key="CopyIcon" Source="yourcopyicon.ico"/>
</Window.Resources>

Итак, основная причина проблемы: Изображение является визуальным элементом, поскольку он происходит от FrameworkElement (который является визуальным элементом), а визуальный элемент не может иметь более одного родителя одновременно .Вот почему первый MenuItem не показывает значок, так как второй MenuItem сбрасывает родительский CopyIcon, делая себя родительским для CopyIcon.

Надеюсь, что это объяснение полезно для вас.Теперь следуйте тому, что Meleak сказал в своем ответе.: -)

1 голос
/ 29 ноября 2010

Попробуйте следующее:

<MenuItem Header=“Paste“ >
<MenuItem.Icon><Image Height=“16“ Width=“16“ Source=“paste.jpg“ /></MenuItem.Icon>
</MenuItem>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...