与除其他事项外WPF菜单HeaderStringFormat和访问键处理(Dealing with

2019-09-19 01:32发布

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

我也想有正常的访问键(“S”和“A”,分别)。

我想出了两种解决方案,但也不是非常理想。

  • 相反,只在XAML创建的主菜单,我可以在MainWindowViewModel创造这一切,所以我不得不在什么进入产生的MenuItems完全控制。 不过,我觉得,这将是MVVM的冲突(其中我试图通过非常严格的,这一次遵守),因为我必须包括每个菜单项在视图模型图标引用。 再加上它似乎有点凌乱。

  • 我可以规定只有这两个特定的MenuItems(也许将来的),像这样的标题,但后来我最终得到一个菜单项,不仅在标头中的下划线,而且不包含访问键。

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

我该怎么办?

Answer 1:

下崽了它。 至少关于如何把它用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>


文章来源: Dealing with WPF Menu HeaderStringFormat and Access Keys among other things