4

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

我还想要普通的访问键(分别为“S”和“A”)。

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

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

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

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

我该怎么办?

4

1 回答 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>
于 2012-07-05T21:46:42.253 回答