Динамическое меню с правильным стилем и иконками - PullRequest
1 голос
/ 21 февраля 2011

Я застрял в этом некоторое время.

Я хочу динамическое меню для моего приложения MVVM.В моей модели представления у меня есть свойство с именем Menu:

Menu : List<IAction>

, где IAction определяется как:

public interface IAction
{
    string Name { get; set; }
    ImageSource Icon { get; set; }
    ICommand Command { get; set; }    
    List<IAction> ChildActions { get; set;} 
}

Я заполняю свое меню следующим образом:

<ToolBar>
    <Menu ItemsSource="{Binding Menu}">
        <Menu.ItemContainerStyle>
            <Style TargetType="MenuItem">
                <Setter Property="Header" Value="{Binding Name}" />
                <Setter Property="Command" Value="{Binding Command}" />
                <Setter Property="Icon">
                    <Setter.Value>
                        <Image Source="{Binding Icon}" />
                    </Setter.Value>
                </Setter>
                <Setter Property="ItemsSource" Value="{Binding ChildActions}" />
            </Style>
        </Menu.ItemContainerStyle>
    </Menu>
</ToolBar>

Приведенный выше код правильно заполняет иерархию, например:

File
    -> Item1
    -> Item1
    -> Submenu
        -> SubItem1
        -> SubItem2

Моя проблема:

Моя проблема в том, что стиль меню отличается от того, когдаЯ определяю статические меню.Похоже, что стиль сбрасывается на серый стиль, похожий на Windows XP, а не на стиль по умолчанию с белым фоном и серым столбцом изображения.

Другая проблема заключается в том, что Item1 и Item2 (то есть элементы напервый уровень) расписан без значков.Subitem1 и Subitem2 имеют значки.

Мой вопрос:

Как заполнить меню с привязкой к данным таким образом, чтобы значки отображались правильно и стиль по умолчаниюостаются нетронутыми?

Спасибо за отзыв!

Ответы [ 2 ]

1 голос
1 голос
/ 21 февраля 2011

Что касается проблемы с темами, вам нужно основать свой стиль на старом стиле меню, добавив следующее к элементу Style:

BasedOn="{StaticResource {x:Type MenuItem}}" 

Я не уверен в проблеме с вашим значком.Я не вижу причин, по которым это сработало бы для одного уровня, но не для другого.

...