2008-09-12 3 views
3

WPFでカスタムMenuHeadersを作成したいので、メニュー項目にアイコンやテキストを(たとえば)追加することができます。通常のMenuItemを使用してアクセシレータを使用してWPFでカスタムMenuHeadersを作成するにはどうすればよいですか?

あなたがまっすぐにテキストとヘッダフィールドを取り込む場合、あなたはアンダースコアを使用してアクセラレータを追加することができます。私は、ユーザーコントロールに入れたい場合など、_File

はしかし、私は次のような何かをするだろうか、この機能が壊れる信じますか?

<Menu> 
<MenuItem> 
    <MenuItem.Header> 
    <UserControl> 
     <Image Source="..." /> 
     <Label Text="_Open" /> 
    </UserControl> 
    </MenuItem.Header> 
</MenuItem> 
... 

答えて

7

私はIconプロパティは、あなたのニーズに合うと思います。
元の質問に答えるには、メニューアイテムの内容を作成するときにアクセラレータの機能を保持することができます。 MenuItemにネストされたコンテンツがある場合は、最初のものと同様に、AccessTextプロパティを明示的にのように定義する必要があります。インラインフォームを使用すると、これは自動的に処理されます。

<Menu> 
    <MenuItem> 
     <MenuItem.Header> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="Images/Open.ico" />  
      <AccessText>_Open..</AccessText> 
     </StackPanel> 
     </MenuItem.Header> 
    </MenuItem> 
    <MenuItem Header="_Close" /> 
    </Menu> 
+0

これは私が必要なものだけのように見える、私は、任意のカスタムコントロールを作成することなく、ピンの機能を追加するために、スタック内のトグルボタンを挿入することができますかキーボードの使用を中断する。ありがとう:) – Nidonocu

4

問題は、あなたがアクセラレータキーを失うことを意味するMenuHeaderの内容の中にイメージを置くことです。メニューヘッダーにイメージを置くだけの場合は、次のようにします。

<MenuItem Header="_Open"> 
    <MenuItem.Icon> 
    <Image Source="images/Open.png"/> 
    </MenuItem.Icon> 
</MenuItem> 

あなたが外観をカスタマイズし、さらに感じ、メニューのcontroltemplateとスタイルを変更したい場合。経験から、メニューとメニューアイテムをスタイリングすることは、他のWPFコントロールをスタイリングする方がはるかに難しくなります。

0

@ a7an:ああ、以前はIconプロパティに気づいていませんでした。それは良いスタートです。

はしかし、特に私は(機能のアイデアのためのOffice 2007の中に、最近ロードされたドキュメントの一覧を参照してください)私は「ピン」機能を持つことができますので、いくつかのMenuItemに余分な「ボタン」を追加したいです。

だけでなく、コードがある必要があるので、私はおそらくコントロールをサブクラス化し、ボタンのコードを追加する必要がありますか? (MenuItemにテンプレートをいじりのaffraidない、既に一度それをしなければならなかったと私は持っていた場合、私は再びそれを行うだろう!;))

2

まず、Iconプロパティには画像しか含めることができないと考えられます。しかし、実際には何かを含むことができます!私はプログラムでImageプロパティをイメージへのパスを含む文字列に直接設定しようとしたとき、これを偶然発見しました。その結果、画像は表示されませんでしたが、パスの実際のテキストが表示されました!それから、まずImage要素を作成し、それをIconプロパティに設定しなければならないことを発見しました。これにより、Imageプロパティはメニューの左側のアイコン領域に配置されたコンテンツコンテナであると思うようになりました。私はボタンをそこに置こうとしました、そして、それは働いた!

これは、メニュー項目のアイコン領域内のテキスト「I」とのボタンを示しています。ボタンをクリックすると、Button_Clickイベントがトリガーされます(ボタンをクリックすると、LanguageMenu_Clickはトリガーされません)。

<MenuItem Name="LanguageMenu" Header="_Language" Click="LanguageMenu_Click"> 
    <MenuItem.Icon> 
    <Button Click="Button_Click">i</Button> 
    </MenuItem.Icon> 
</MenuItem> 

これは、アイコン用の画像を作成する必要がありますが、シンプルな「アイコン」を表示する代わりに、シンボルフォントでテキストを使用しないために代替につながります。次の例では、floppydiskシンボルを含むWingdingsフォントを使用しています。フォント内のこのシンボルは、XAMLで特別な意味を持つ文字の<にマッピングされるため、代わりに符号化されたバージョン&lt;を使用する必要があります。これは夢のように機能します!以下は、メニュー項目のアイコンとしてフロッピーディスクのシンボルを示しています

<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save"> 
    <MenuItem.Icon> 
    <Label VerticalAlignment="Center" HorizontalAlignment="Center" 
      FontFamily="Wingdings">&lt;</Label> 
    </MenuItem.Icon>     
</MenuItem> 
関連する問題