动态菜单与正确的风格和图标

时间:2011-02-21 13:57:34

标签: wpf mvvm binding menu styles

我已经坚持了一段时间了。

我想为我的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 个答案:

答案 0 :(得分:1)

在主题问题上,您需要通过将以下内容添加到Style元素来使您的样式基于旧菜单样式:

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

我不确定你的图标问题。我认为没有理由它可以在一个级别而不是另一个级别。

答案 1 :(得分:1)