Настройка значка MenuItem через установщик стиля - PullRequest
5 голосов
/ 04 марта 2011
<Style x:Key="ContextMenuItemStyle" TargetType="{x:Type MenuItem}">
    <Setter Property="Icon" Value="{Binding Icon}" />
    <Setter Property="Header" Value="{Binding Text}" />
    <Setter Property="ItemsSource" Value="{Binding Children}" />
    <Setter Property="Command" Value="{Binding Command}" />
</Style>

установка в коде так:

Uri refreshUri = new Uri("..\\Resources\\Refresh16.bmp",UriKind.Relative);
BitmapImage refreshIcon = new BitmapImage();
refreshIcon.UriSource = refreshUri;

Значок не появляется, какие-либо подсказки?

Ответы [ 2 ]

7 голосов
/ 04 марта 2011

Если refreshIcon является источником вашего свойства Icon, вам может потребоваться либо вызвать NotifyPropertyChanged("Icon") после вашего примера кода (и реализовать интерфейс INotifyPropertyChanged) и / или объявить Icon какDependencyProperty.

Вот ссылка на дополнительную информацию об интерфейсе INotifyPropertyChanged.

Ах, я вижу вашу проблему ... попробуйте установить Icon свойство Image и привязка к источнику Image:

<Setter Property="Icon">
    <Setter.Value>
        <Image Source="{Binding Icon}" />
    </Setter.Value>
</Setter>

Вы также можете просто поместить изображение в папку Images в вашем основном проекте и ссылаться на него в xaml следующим образом:

<Setter Property="Icon">
    <Setter.Value>
        <Image Source="/ProjectName;component/Images/IconName.ico" />
    </Setter.Value>
</Setter>
5 голосов
/ 08 июня 2011

Для тех, кто все еще ищет решение, это сработало для меня:

<Window.Resources>
    <Image x:Key="Icon" Source="/ProjectName;component/Images/IconName.ico" x:Shared="false"/>
    <Style x:Key="MenuItem">
        <Setter Property="MenuItem.Header" Value="Header Text"/>
        <Setter Property="MenuItem.Icon" Value="{DynamicResource Icon}"/>
    </Style>
</Window.Resources>
...