none
メニューの文字列を上下中央に表示したい RRS feed

  • 質問

  • TakaboSoftと申します。

    Vista+VS2010+WPFに挑戦していたのですが、XAMLでメニューを定義してみたところ、

    実行時にメニュー文字列が上に寄ってしまいます。

    →http://takabosoft.com/wp-content/uploads/2010/06/Edge2.png 

    見た目があまり良くないため、できれば(上下)中央に表示させたいのですが、どうすれば良いでしょうか。

    ご教授をお願いいたします。

     

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    
      <DockPanel>
        <Menu DockPanel.Dock="Top">
          <MenuItem Header="ファイル(_F)">
            <MenuItem Header="新規作成(_N)" InputGestureText="Ctrl+N">
              <MenuItem.Icon>
                <Image Source="Image/NewDocumentHS.png" Width="16" Height="16"/>
              </MenuItem.Icon>
            </MenuItem>
            <MenuItem Header="開く(_O)" InputGestureText="Ctrl+O" />
            <Separator />
            <MenuItem Header="終了(_X)" />
          </MenuItem>
        </Menu>
        <TextBox></TextBox>
      </DockPanel>
      
    </Window>
    
    2010年6月21日 12:16

回答

  • 一般的にメニュー文字が上に寄ってしまっている事は、誰も気にされないのでしょうか?

    私の環境(Windows 7 64bit, WPF 4)で見る限り、上に寄っていることはさほど気になりませんでした。

    画像
    http://trapemiya.wankuma.com/images/menu_align.jpg

    TakaboSoftさんの画像ではやや上に寄っていますね。どのような環境なのでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク TakaboSoft 2010年6月25日 1:02
    2010年6月22日 6:55
    モデレータ

すべての返信

  • ヘッダーだけだと以下のようにしてできますが、InputGestureTextはstring型を受け取るのでHeaderと同じようにはできません。

    <MenuItem InputGestureText="Ctrl+N">
      <MenuItem.Icon>
        <Image Source="Image/NewDocumentHS.png" Width="16" Height="16"/>
      </MenuItem.Icon>
      <MenuItem.Header>
        <TextBlock VerticalAlignment="Center">新規作成(_N)</TextBlock>
      </MenuItem.Header>
    </MenuItem>

    MenuItemのControlTemplateで、HeaderおよびInputGestureTextにVerticalAlignment="Center"を指定するばお望みのことができるでしょう。

    MenuItem ControlTemplate の例
    http://msdn.microsoft.com/ja-jp/library/ms747082(VS.80).aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答の候補に設定 山本春海 2010年6月23日 7:30
    2010年6月22日 4:20
    モデレータ
  • trapemiya様、ご回答ありがとうございます。

    ControlTemplateの方でもう少し調べてみたいと思います。

     

    一般的にメニュー文字が上に寄ってしまっている事は、誰も気にされないのでしょうか?

    何かこれを解決するための定石があるのかなと思ってお聞きしてみたのですが、

    なかなか一筋縄ではいかなそうな感じですね。

    2010年6月22日 6:00
  • 一般的にメニュー文字が上に寄ってしまっている事は、誰も気にされないのでしょうか?

    私の環境(Windows 7 64bit, WPF 4)で見る限り、上に寄っていることはさほど気になりませんでした。

    画像
    http://trapemiya.wankuma.com/images/menu_align.jpg

    TakaboSoftさんの画像ではやや上に寄っていますね。どのような環境なのでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク TakaboSoft 2010年6月25日 1:02
    2010年6月22日 6:55
    モデレータ
  • お手数お掛けいたしましたm(_ _)m

    私の方の環境はVista+WPF3で、OSの個人設定でメニューフォントに「MS UI Gothic」を指定しておりました。

    <Menu FontFamily="MS UI Gothic">

    としてもご確認いただけるかと思います。

    メニューフォントがメイリオだと、ちょうど良い位置に表示されるようですね(となりますと、ほぼ一般的には問題が無いという事でもありますね・・・)。

    2010年6月22日 7:18
  • なるほど、そういうことでしたか。<Menu FontFamily="MS UI Gothic">を指定することによって、こちらの環境でも再現しました。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年6月22日 7:57
    モデレータ