SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

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

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

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

07.チェックマークを付ける

 MenuItem クラスのIsCheckableプロパティにTrueを設定すると、メニューにチェックマークを付けることができるようになります。

 チェック状態の取得および設定はIsCheckedプロパティで行い、Trueがチェック状態、Falseが未チェック状態を表します。

 またチェック時の動作はCheckedイベントで、未チェック時の動作はUncheckedイベントで行います。

 下記は、[フォント]メニューの[太字]と[斜体]をチェックできるようにする例です。

 メニューにチェックが付けられると、テキストボックスに記述された文字列を太字や斜体に設定します。

チェックマークを付ける例
チェックマークを付ける例
XAMLの例
<DockPanel Name="Dock1">
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="ファイル(_F)" Name="MenuItem1">
            <MenuItem Command="New">
                <MenuItem.Icon>
                    <Image Source="Images/NewDocument.png" Width="16" Height="16" />
                </MenuItem.Icon>
            </MenuItem>
            <MenuItem Command="Save">
                <MenuItem.Icon>
                    <Image Source="Images/Save.png" Width="16" Height="16" />
                </MenuItem.Icon>
            </MenuItem>
            <Separator />
            <MenuItem Command="Close" />
        </MenuItem>
        <MenuItem Header="フォント(_F)" Name="menuFont">
            <MenuItem Name="menuFontBold"
                      Header="太字" 
                      IsCheckable="True" 
                      Checked="menuFontBold_Checked" 
                      Unchecked="menuFontBold_Unchecked" />
            <MenuItem Name="menuFontItalic" 
                      Header="斜体"
                      IsCheckable="True"
                      Checked="menuFontItalic_Checked"
                      Unchecked="menuFontItalic_Unchecked" />                    
        </MenuItem>
    </Menu>
    <TextBox Name="TextBox1" TextWrapping="Wrap" 
             AcceptsReturn="True"
             VerticalScrollBarVisibility="Visible" />
</DockPanel>
VBの例
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    '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.IsCheckable = True
        menuFontItalic.IsCheckable = True

        '未チェック状態にする
        menuFontBold.IsChecked = False
        menuFontItalic.IsChecked = False

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

        Me.Dock1.Children.Add(mainMenu)
End Sub

' [太字]チェック時
Private Sub menuFontBold_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    TextBox1.FontWeight = FontWeights.Bold
End Sub

' [太字]未チェック時
Private Sub menuFontBold_Unchecked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    TextBox1.FontWeight = FontWeights.Normal
End Sub

' [斜体]チェック時
Private Sub menuFontItalic_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    TextBox1.FontStyle = FontStyles.Italic
End Sub

' [斜体]未チェック時
Private Sub menuFontItalic_Unchecked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    TextBox1.FontStyle = FontStyles.Normal        
End Sub
C#の例
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // 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.IsCheckable = true;
    menuFontItalic.IsCheckable = true;

    // 未チェック状態にする
    menuFontBold.IsChecked = false;
    menuFontItalic.IsChecked = false;

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

    this.Dock1.Children.Add(mainMenu);
}

// [太字]チェック時
private void menuFontBold_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Bold;
}

// [太字]未チェック時
private void menuFontBold_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Normal;
}

// [斜体]チェック時
private void menuFontItalic_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Italic;
}

// [斜体]未チェック時
private void menuFontItalic_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Normal;
}
ポイント

 メニュー項目にチェックマークを付けるにはIsCheckableプロパティにTrueを設定し、チェック状態にする場合はIsCheckedプロパティにTrueを設定する。

 チェック時の動作はChekedイベントで、未チェック時の動作はUncheckedイベントで行う。

次のページ
08.メニューを無効にする

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

Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5769 2011/03/03 14:00

イベント

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

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

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

メールバックナンバー