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)

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

 コンテキストメニューを使用するには ContextMenuクラスを使用します。

 メニュー項目は、通常のメニューを作成するときと同様にMenuItemクラスを使用します。

 下記はWindowに貼り付けられたTabControlとListBoxにコンテキストメニューを設定する例です。

 XAMLでは、コンテキストメニューをリソースとして作成してバインディングしています。

 また、XAMLではなくコードでコンテキストメニューを作成する例も下記に示します。

コンテキストメニューを使用する例
コンテキストメニューを使用する例
XAMLの例
<Window.Resources>
    <ContextMenu x:Key="menuListBox">
        <MenuItem Header="挿入" />
        <MenuItem Header="削除" />
    </ContextMenu>
    <ContextMenu x:Key="menuTab">
        <MenuItem Header="タブの追加" />
        <MenuItem Header="タブを閉じる" />
    </ContextMenu>
</Window.Resources>
<Grid>
    <TabControl Height="233" HorizontalAlignment="Left" Margin="12,16,0,0"
                Name="TabControl1" VerticalAlignment="Top" Width="254"
                ContextMenu="{DynamicResource menuTab}">
        <TabItem Header="言語" Name="TabItem1">
            <Grid>
                <ListBox HorizontalAlignment="Left"  Name="ListBox1" VerticalAlignment="Top" 
                         Height="199" Width="244"
                         ContextMenu="{DynamicResource menuListBox}">
                    <ListBoxItem>VB.NET</ListBoxItem>
                    <ListBoxItem>C#</ListBoxItem>
                    <ListBoxItem>VC++</ListBoxItem>
                    <ListBoxItem>F#</ListBoxItem>
                    <ListBoxItem>PowerShell</ListBoxItem>
                </ListBox>
            </Grid>
        </TabItem>
    </TabControl>
</Grid>
VBの例
'XAMLではなくコードでコンテキストメニューを作成するには下記のようにします

'ListBox1用のコンテキストメニュー
Dim menuListBox As New ContextMenu()
Dim menuItemInsert As New MenuItem()
Dim menuItemDelete As New MenuItem()

'[挿入]と[削除]項目の設定
menuItemInsert.Header = "挿入"
menuItemDelete.Header = "削除"

'ListBox1用のコンテキストメニューに[挿入]と[削除]を追加
menuListBox.Items.Add(menuItemInsert)
menuListBox.Items.Add(menuItemDelete)

'作成したコンテキストメニューをListBox1に設定
ListBox1.ContextMenu = menuListBox

'TabControl1用のコンテキストメニュー
Dim menuTab As New ContextMenu()
Dim menuItemAdd As New MenuItem()
Dim menuItemClose As New MenuItem()

'[挿入]と[削除]項目の設定
menuItemAdd.Header = "タブの追加"
menuItemClose.Header = "タブを閉じる"

'TabControl1用のコンテキストメニューに[タブの追加]と[タブを閉じる]を追加
menuTab.Items.Add(menuItemAdd)
menuTab.Items.Add(menuItemClose)

'作成したコンテキストメニューをTabControl1に設定
TabControl1.ContextMenu = menuTab
C#の例
// XAMLではなくコードでコンテキストメニューを作成するには下記のようにします

// ListBox1用のコンテキストメニュー
ContextMenu menuListBox = new ContextMenu();
MenuItem menuItemInsert = new MenuItem();
MenuItem menuItemDelete = new MenuItem();

// [挿入]と[削除]項目の設定
menuItemInsert.Header = "挿入";
menuItemDelete.Header = "削除";

// ListBox1用のコンテキストメニューに[挿入]と[削除]を追加
menuListBox.Items.Add(menuItemInsert);
menuListBox.Items.Add(menuItemDelete);

// 作成したコンテキストメニューをListBox1に設定
ListBox1.ContextMenu = menuListBox;

// TabControl1用のコンテキストメニュー
ContextMenu menuTab = new ContextMenu();
MenuItem menuItemAdd = new MenuItem();
MenuItem menuItemClose = new MenuItem();

// [挿入]と[削除]項目の設定
menuItemAdd.Header = "タブの追加";
menuItemClose.Header = "タブを閉じる";

// TabControl1用のコンテキストメニューに[タブの追加]と[タブを閉じる]を追加
menuTab.Items.Add(menuItemAdd);
menuTab.Items.Add(menuItemClose);

// 作成したコンテキストメニューをTabControl1に設定
TabControl1.ContextMenu = menuTab;
ポイント

 コンテキストメニューを作成するにはContextMenuクラスを使用する。

 メニュー項目は通常のメニュー同様MenuItemクラスを使用する。

まとめ

 今回はメニューに関するTipsを紹介しました。

 アプリケーションを作成する上でメニュー機能は欠かせないものなので、この機会にぜひ習得してはいかがでしょうか。

 最後にメニューに関するMSDNのリンクを下記に示します。

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング