WPFコントロール:Menu (メインメニュー)

コンピュータ

XAML

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Menu Grid.Row="0" Background="White">
        <MenuItem Header="ファイル(_F)">
            <MenuItem Header="終了(_X)" Click="MenuExit_Click"/>
        </MenuItem>
    </Menu>

    <Grid Grid.Row="1" Background="#F5F5F5">
        <TextBlock Text="ここにアプリの内容を記述" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center" 
                    Foreground="#999999"/>
    </Grid>
</Grid>

コードビハインド

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    /// <summary>
    /// 「ファイル > 終了」クリック時の処理
    /// </summary>
    private void MenuExit_Click(object sender, RoutedEventArgs e)
    {
        // アプリケーションを終了させる標準的なコード
        Application.Current.Shutdown();
    }

}

WPFのMenuはItemsControl(構造的にはTreeView的)なので、
バインディングで項目をコレクションで管理することも可能ですが、
動的に項目を増やすアプリケーションは余り作らない。

また、コードビハインドでは、Clickイベントを捕まえてイベントハンドラで処理するのが一般的です。

一方、データバインディングを用いる場合は、Commandプロパティに対して、
ICommandを実装したオブジェクトのプロパティをバインドすることで処理を実行します。

Menuの構造はXAMLの入れ子構造で表現するのにちょうどいいコントロールだと思います。

コメント