好。所以我希望我的应用程序在其主菜单中显示“保存”和“另存为...”项目,就像Visual Studio一样;即“保存{当前文件}”和“将{当前文件}保存为...”
我还想拥有普通的访问密钥(分别为“S”和“A”)。
我想出了两个解决方案,但两者都不是很理想。
我没有在xaml中专门创建主菜单 在MainWindowViewModel中创建所有内容,这样我就可以完全控制生成的MenuItems的内容。但是,我觉得这会违反MVVM(我这次试图非常严格地遵守),因为我必须在ViewModel中包含对每个MenuItem的Icon的引用。而且看起来有点乱。
我可以像这样规定这两个特定的MenuItem(也许是未来的)的标题,但最后我得到一个MenuItem,它不仅在标题中有下划线,而且还不包含访问密钥。
<MenuItem Header="{Binding CurrentFileName}"
HeaderStringFormat="Save {0} _As...">
我该怎么办?
答案 0 :(得分:4)
Whelp,想通了。至少关于如何使用XAML中描述的整个主菜单完成它。只是使标题内容成为AccessText控件而不是字符串,它就像魅力一样。
<MenuItem>
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding HasSelection}" Value="false">
<Setter Property="IsEnabled" Value="false"/>
<Setter Property="Header">
<Setter.Value>
<AccessText Text="Save Selected File _As..."/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding HasSelection}" Value="true">
<Setter Property="IsEnabled" Value="true"/>
<Setter Property="Header">
<Setter.Value>
<AccessText Text="{Binding SelectedFile.Filename, StringFormat=Save {0} _As...}"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>