2016-06-30 39 views
0

最近のファイルビューモデルのコレクションをバインドする最近のファイルメニューアイテムを作成しました。バインド時にWPFメニュー項目のアンダースコアを使用する

<MenuItem Header="_Recent Files" ItemsSource="{Binding RecentFiles}" Command="{x:Static pm:MainWindow.RecentFileListCommand}"> 
    <MenuItem.ItemContainerStyle> 
     <Style> 
      <Setter Property="MenuItem.Header" Value="{Binding}"/> 
      <Setter Property="MenuItem.Command" Value="{x:Static pm:MainWindow.RecentFileOpenCommand}"/> 
      <Setter Property="MenuItem.CommandParameter" Value="{Binding FilePath}"/> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
</MenuItem> 

私はリストに番号たい、と私は(正確にどのようにVisual Studioがそれをしない)数字をショートカットとして使用することにしたいです。私のビューモデルには、NumberフィールドとNameフィールドがあります。

return string.Format("_{0} {1}", Number, FilePath); 

結合した場合しかし、アンダースコアは、ヘッダテキスト(ないショートカット)の一部としてリテラルと表示として見られている:私は下線を含むヘッダを返すように、toString()メソッドをオーバーライドします。私はまた、運がなければHeaderStringFormatを使ってみました:どうすれば、アンダースコアがショートカットで、リテラル文字列ではないのか分かりますか?

+0

「この答え」(http://stackoverflow.com/a/7416523/424129)の「AccessText」コントロールを持つContentTemplateをメニューアイテムに渡すこともできます(これはボタン用ですが、MenuItemはContentTemplateプロパティも同じ祖先クラスIIRCから継承されています)。 –

答えて

1

AccessTextを返そうとする可能性がありますが、それは懸念の分離を引き起こす可能性があります。

Matthew Whitedに記載されているように、文字列のみを返し、コンバータを使用してAccessTextにするのがよりクリーンな方法です。あるいは、HeaderTemplateを使用してそこに作成してください。

+1

ビューモデルから文字列を返すだけなら、TypeConverterを使って 'AccessText'に変更することはできませんか? –

+0

私はあなたが価値あるコンバータを望んでいると思うが、それはおそらくうまくいくだろう。 –

+0

えええええええええと、私のコメントを修正しようとしていたが、時間がなくなった。 –

関連する問題