4

わかった。そのため、Visual Studioと同じように、アプリケーションのメインメニューに[保存]と[名前を付けて保存...]の項目を表示したいと思います。つまり、「{現在のファイル}を保存」と「{現在のファイル}に名前を付けて保存...」

通常のアクセスキー(それぞれ「S」と「A」)も欲しいです。

私は2つの解決策を考え出しましたが、どちらも非常に望ましいものではありません。

  • メインメニューをxamlだけで作成する代わりに、すべてをMainWindowViewModelで作成できるので、生成されたMenuItemに何を入れるかを完全に制御できます。ただし、ViewModelに各MenuItemのアイコンへの参照を含める必要があるため、これはMVVM(今回は非常に厳密に順守しようとしています)の違反になると思います。さらに、それは少し厄介なようです。

  • このように、これら2つの特定のMenuItem(およびおそらく将来のMenuItem)のヘッダーだけを指定できますが、ヘッダーにアンダースコアが含まれているだけでなく、アクセスキーも含まれていない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 に答える