本文へスキップ
BecomeCoder

C# WPFコース · 第1章 WPF ― デスクトップアプリ開発 · レッスン2

Button(ボタン)

ブラウザで完結

導入

**Button(ボタン)**は、ユーザー操作の起点となる最も基本のコントロールです。クリックすると処理を実行します。ここから「1コントロール1レッスン」で、代表的なWPFコントロールを1つずつ詳しく見ていきます。

XAMLサンプル(読み物)

<!-- Content に表示文字、Click にコードビハインドのメソッド名を指定 -->
<Button Content="送信"
        Width="100" Height="32"
        Margin="0,8"
        Click="OnSubmitClick" />

<!-- Content には文字だけでなく要素も置ける(アイコン+文字など) -->
<Button Width="120">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="⭳ " />
        <TextBlock Text="ダウンロード" />
    </StackPanel>
</Button>
// コードビハインド(MainWindow.xaml.cs)
private void OnSubmitClick(object sender, RoutedEventArgs e)
{
    MessageBox.Show("送信しました");
}

主なプロパティ

  • Content … ボタンに表示する内容(文字列でも、中に要素を置いてもよい)
  • IsEnabledfalseで押せない(グレーアウト)状態にする
  • Width / Height / Margin / Padding … 大きさ・余白
  • ToolTip … マウスを乗せたときの説明

主なイベント

  • Click … クリックされたとき(最頻出)

補足: Click+コードビハインドは手軽ですが、実務では次の「MVVM版」が基本です。

MVVM(実務ではこう書く)

処理は**コードビハインドではなくViewModelのCommand**に結びつけます。View(見た目)とViewModel(処理)が分離され、処理を単体テストできます。

<!-- Click= ではなく Command= でViewModelのコマンドにバインド -->
<Button Content="送信" Command="{Binding SubmitCommand}" />
// ViewModel 側(ICommand を公開。RelayCommand は 140/141 回で作ります)
public ICommand SubmitCommand { get; }
// 例: SubmitCommand = new RelayCommand(() => { /* 送信処理をここに */ });

CommandにすればClickハンドラもx:Nameも不要。CanExecuteで「押せる条件」を返せば、ボタンの有効/無効も自動制御できます(詳細は 140 イベントとコマンド)。

試す(ローカル)

  • まずコードビハインド版(Click)で動きを確認。次にViewModelを作りCommand版に置き換え、コードビハインドを空にできることを体感する。
  • IsEnabled="False"にすると押せなくなることも確認。

まとめ

  • Buttonは操作の起点。実務ではClick(コードビハインド)ではなくCommand(ViewModel)に結びつける
  • Contentは文字でも要素でもよい、IsEnabledで有効/無効
  • View(見た目)とViewModel(処理)を分けるのがMVVMの基本

次回: 文字を入力するTextBoxです。

実際に動かしてみよう

下のエディタに XAML を書くと、右側のプレビューにその場で WPF 風のUIが描画されます。テキスト入力・チェック・選択はそのまま動き、`{Binding}` で結んだ TextBox と TextBlock は打った文字がリアルタイムで反映されます。本文の XAML を打ち込んだり、属性(Width・Margin・FontSize・色など)を書き換えたりして、レイアウトの変化を確かめながら進めましょう(C# のコードビハインドや Command、ItemsSource などC#側のデータに依存する処理は実行されません。それらは Visual Studio で試します)。

XAML (WPF) プレビュー

書いた XAML をその場で WPF 風の画面に描画する学習用プレビューを読み込みます(本物のWPFではなく、レイアウトとコントロールの見た目・{Binding}の双方向バインディングを再現したものです。C#のコードビハインド/Command は実行されません)。
スクロールして表示された時点でも自動で読み込まれます。