導入
**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… ボタンに表示する内容(文字列でも、中に要素を置いてもよい)IsEnabled…falseで押せない(グレーアウト)状態にする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です。