我已经为此停留了一段时间。
我想要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/