我已经为此停留了一段时间。

我想要MVVM应用程序的动态菜单。在我的 View 模型中,我有一个名为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具有图标。

我的问题:

如何以正确显示图标且完整保留默认样式的方式填充数据绑定(bind)菜单?

感谢您的反馈!

最佳答案

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

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

我不确定您的图标问题。我认为没有理由将它用于一个级别,但不适用于另一个级别。

关于wpf - 具有正确样式和图标的动态菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5066835/

10-13 04:45
查看更多