SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight/WPFで使える逆引きTips集

Silverlight/WPFで使える逆引きTips集
――メニュー機能

(10) MenuコントロールとContextMenuコントロール

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード Menu_WPF_VB.zip (71.1 KB)
ダウンロード Menu_WPF_CS.zip (65.4 KB)

08.メニューを無効にする

 MenuItemクラスIsEnabledプロパティにFalseを設定すると、メニュー項目を無効にすることができます。

 下記は[フォント]メニューの[太字]項目を無効にする例です。

メニューを無効にする例
メニューを無効にする例
XAMLの例
<DockPanel Name="Dock1">
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="ファイル(_F)">
            <MenuItem Command="New" />
            <MenuItem Command="Save"/>
            <Separator />
            <MenuItem Command="Close" />
        </MenuItem>
        <MenuItem Header="フォント(_F)">
            <MenuItem Header="太字" IsEnabled="False"/>
            <MenuItem Header="斜体" />
        </MenuItem>
    </Menu>
    <TextBox Name="TextBox1" TextWrapping="Wrap" 
             AcceptsReturn="True"
             VerticalScrollBarVisibility="Visible" />
</DockPanel>
VBの例
'XAMLではなくコードでメニューを作成する場合は下記のようにします

Dim mainMenu As New Controls.Menu
Dim menuFile As New MenuItem()
Dim menuFileNew As New MenuItem()
Dim menuFileSave As New MenuItem()
Dim menuFileEnd As New MenuItem
Dim menuFont As New MenuItem
Dim menuFontBold As New MenuItem
Dim menuFontItalic As New MenuItem

mainMenu.VerticalAlignment = VerticalAlignment.Top

'[ファイル]メニュー項目の作成
menuFile.Header = "ファイル(_F)"
menuFileNew.Command = ApplicationCommands.[New]
menuFileSave.Command = ApplicationCommands.Save
menuFileEnd.Command = ApplicationCommands.Close
'[ファイル]メニューに[新規作成][保存][終了]項目を追加
menuFile.Items.Add(menuFileNew)
menuFile.Items.Add(menuFileSave)
menuFile.Items.Add(menuFileEnd)


'[フォント]メニュー項目の作成
menuFont.Header = "フォント(_F)"
menuFontBold.Header = "太字"
menuFontItalic.Header = "斜体"
'[フォント]メニューに[太字][斜体]項目を追加
menuFont.Items.Add(menuFontBold)
menuFont.Items.Add(menuFontItalic)

'[太字]メニューを無効にする
menuFontBold.IsEnabled = False

'メインメニューに[ファイル]メニューを追加
mainMenu.Items.Add(menuFile)
'メインメニューに[フォント]メニューを追加
mainMenu.Items.Add(menuFont)

Me.Dock1.Children.Add(mainMenu)
C#の例
// XAMLではなくコードでメニューを作成する場合は下記のようにします

System.Windows.Controls.Menu mainMenu =
    new System.Windows.Controls.Menu();
MenuItem menuFile = new MenuItem();
MenuItem menuFileNew = new MenuItem();
MenuItem menuFileSave = new MenuItem();
MenuItem menuFileEnd = new MenuItem();
MenuItem menuFont = new MenuItem();
MenuItem menuFontBold = new MenuItem();
MenuItem menuFontItalic = new MenuItem();

mainMenu.VerticalAlignment = VerticalAlignment.Top;

// [ファイル]メニュー項目の作成
menuFile.Header = "ファイル";
menuFileNew.Command = ApplicationCommands.New;
menuFileSave.Command = ApplicationCommands.Save;
menuFileEnd.Command = ApplicationCommands.Close;
// [ファイル]メニューに[新規作成][保存][終了]項目を追加
menuFile.Items.Add(menuFileNew);
menuFile.Items.Add(menuFileSave);
menuFile.Items.Add(menuFileEnd);

// [フォント]メニュー項目の作成
menuFont.Header = "フォント(_F)";
menuFontBold.Header = "太字";
menuFontItalic.Header = "斜体";
// [フォント]メニューに[太字][斜体]項目を追加
menuFont.Items.Add(menuFontBold);
menuFont.Items.Add(menuFontItalic);

// [太字]メニューを無効にする
menuFontBold.IsEnabled = false;

// メインメニューに[ファイル]メニューを追加
mainMenu.Items.Add(menuFile);
// メインメニューに[編集]メニューを追加
mainMenu.Items.Add(menuFont);

this.Dock1.Children.Add(mainMenu);
ポイント

 メニュー項目を無効にするにはMenuItemクラスのIsEnabledプロパティにFalseを設定する。

09.サブメニューが開かれたことを知る

 MenuItemクラスIsSubmenuOpenプロパティにTrueを設定すると、サブメニューが開かれたことを知ることができます。

 また、サブメニューが開かれたときの処理は SubmenuOpendイベントで行います。

 下記は、[編集]メニューの[検索と置換]のサブメニューが開かれたときに「メニューオープン」というメッセージを表示する例です。

サブメニューが開かれたことを知る例
サブメニューが開かれたことを知る例
XAMLの例
<DockPanel Name="Dock1">
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="ファイル(_F)">
            <MenuItem Command="Save"/>
            <Separator />
            <MenuItem Command="Close" />
        </MenuItem>
        <MenuItem Header="編集">
            <MenuItem Header="コピー" />
            <MenuItem Header="切り取り" />
            <MenuItem Header="貼り付け" />
            <MenuItem Header="検索と置換" IsSubmenuOpen="True" Name="menuEditSearchReplace">
                <MenuItem Header="検索" />
                <MenuItem Header="置換" />
            </MenuItem>
        </MenuItem>
    </Menu>
    <TextBox Name="TextBox1" TextWrapping="Wrap" 
             AcceptsReturn="True"
             VerticalScrollBarVisibility="Visible" />
</DockPanel>
VBの例
' サブメニューが開かれた場合の処理
Private Sub menuSearchReplace_SubmenuOpened(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles menuEditSearchReplace.SubmenuOpened
    MessageBox.Show("メニューオープン")
End Sub
C#の例
// サブメニューが開かれた場合の処理
private void menuEditSearchReplace_SubmenuOpened(object sender, RoutedEventArgs e)
{
    MessageBox.Show("メニューオープン");
}
ポイント

 サブメニューが開かれたことを知るにはMenuItemクラスのIsSubmenuOpenプロパティにTrueを設定する。

 サブメニューが開かれたときの処理はSubmenuOpendイベントで行う。

次のページ
10.コンテキストメニューを使用する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5769 2011/03/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング