处理WPF菜单HeaderStringFormat和访问键等问题。

4

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

我还希望具有正常的访问键(分别为“S”和“A”)。

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

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

  • 我可以像这样指定仅这两个特定的MenuItems(以及可能的未来MenuItems)的标题,但是这样我最终会得到一个MenuItem,它不仅在标题中包含下划线,而且还没有访问键。

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

我该怎么办?

1个回答

4

好的,我知道了。至少关于如何通过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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接