处理WPF菜单HeaderStringFormat和Access Keys等

时间:2012-07-03 14:25:23

标签: c# wpf mvvm menuitem access-keys

好。所以我希望我的应用程序在其主菜单中显示“保存”和“另存为...”项目,就像Visual Studio一样;即“保存{当前文件}”和“将{当前文件}保存为...”

我还想拥有普通的访问密钥(分别为“S”和“A”)。

我想出了两个解决方案,但两者都不是很理想。

  • 我没有在xaml中专门创建主菜单 在MainWindowViewModel中创建所有内容,这样我就可以完全控制生成的MenuItems的内容。但是,我觉得这会违反MVVM(我这次试图非常严格地遵守),因为我必须在ViewModel中包含对每个MenuItem的Icon的引用。而且看起来有点乱。

  • 我可以像这样规定这两个特定的MenuItem(也许是未来的)的标题,但最后我得到一个MenuItem,它不仅在标题中有下划线,而且还不包含访问密钥。

<MenuItem Header="{Binding CurrentFileName}"
          HeaderStringFormat="Save {0} _As...">

我该怎么办?

1 个答案:

答案 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>