ボタンとは?
ボタンはこれまでも使ってきました。基本的にはクリックイベントを実装し、押されたときにデータを保存する処理などを記述します。ここでは、そのボタンの使い方の詳細と種類を見ていきます。
通常のボタン
通常のボタンは基本的にContentに「保存」などの文言を表示して、Clickイベントを実装するという使い方になりますが、WindowsFormsのボタンコントロールとは異なり、Contentが文字だけでなく、StackPanel等を設定できるため、ボタンの文言表示の場所に、画像と文字を並べて表示するという事が、簡単にできるようになりました。
ボタンのContentにStackPanelを設置し、画像とテキストをならべて表示する例
<Button Margin="10"
x:Name="NormalButton"
Click="NormalButton_Click">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Ellipse Fill="Red"
Width="15"
Height="15"
Margin="0,0,30,0"/>
<TextBlock Text="AAA"/>
</StackPanel>
</Button.Content>
</Button>
この例では、通常
<Button Content="AAA"/>
と定義していた書き方とは異なり、Button.Contentのエリアを作り、その中にStackPanel設置して、横向きに赤丸マークとTextBlockにテキストを”AAA”と表示しています。 このXamlのレイアウトは次のようになります。
RepeatButton
RepeatButtonはボタンを押下している間中、クリックイベントを通知するボタンです。
RepeatButtonを押下し続けると、最初に1回クリックイベントが通知され、その後、Delayに設定されているミリ秒間なにもせず待機されます。Delayミリ秒が経過するとクリックイベントが通知され、その後はIntervalに設定されている値ミリ秒間隔で、クリックイベントが通知され、ボタンの押し下げを止めると、クリックイベントも通知されなくなります。
| Interval | クリックイベントが通知される間隔(ミリ秒) |
|---|---|
| Delay | リピートを開始するまでの待機時間(ミリ秒) |
次の例で、RepeatButtonを押し続けると、最初に1回クリックイベントが通知され、その5秒後から、2秒間隔でクリックイベントが通知され続けます。
<RepeatButton Content="repeat"
FontSize="20"
x:Name="RepeatButton"
Click="RepeatButton_Click"
Interval="2000"
Delay="5000"/>
private void RepeatButton_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "RepeatButton");
}
ToggleButton
ToggleButtonとは、ボタンを押し下げている状態と押し上げている(何もしていない)状態の2つの状態を表すボタンです。見た目はボタンですが、CheckBoxのチェックありとチェックなしの状態のボタン版と考えていただいてOKです。
サンプルコード
次の例では、ボタンを押すたびに、MyToggleBtton.IsCheckedがTureとFalseに変化し、ボタンはTrueのときは押したままの描画となります。
<ToggleButton Content="toggle"
FontSize="20"
x:Name="MyToggleBtton"
Click="MyToggleBtton_Click"/>
private void MyToggleBtton_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("toggle button click:" + MyToggleBtton.IsChecked);
}
各種ボタンサンプルコード全体
3種類のボタンのサンプルコードをまとめます。
<Window x:Class="WPF013.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF013"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300">
<Grid>
<StackPanel>
<Button Margin="10"
x:Name="NormalButton"
Click="NormalButton_Click">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Ellipse Fill="Red"
Width="15"
Height="15"
Margin="0,0,30,0"/>
<TextBlock Text="AAA"/>
</StackPanel>
</Button.Content>
</Button>
<RepeatButton Content="repeat"
FontSize="20"
x:Name="RepeatButton"
Click="RepeatButton_Click"
Interval="2000"
Delay="5000"/>
<ToggleButton Content="toggle"
FontSize="20"
x:Name="MyToggleBtton"
Click="MyToggleBtton_Click"/>
</StackPanel>
</Grid>
</Window>
using System;
using System.Windows;
namespace WPF013
{
///
/// MainWindow.xaml の相互作用ロジック
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void NormalButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Normal button click!!");
}
private void RepeatButton_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "RepeatButton");
}
private void MyToggleBtton_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("toggle button click:" + MyToggleBtton.IsChecked);
}
}
}
Xamlレイアウトイメージ
- C#WPFの道#1!WPFのプロジェクト作成方法をわかりやすく解説!
- C#WPFの道#2!StackPanelの使い方をわかりやすく解説!
- C#WPFの道#3!Gridの使い方をわかりやすく解説!
- C#WPFの道#4!コントロールの名前の付け方をわかりやすく解説!
- C#WPFの道#5!イベントの定義の仕方をわかりやすく解説!
- C#WPFの道#6!リソースとStaticResourceの定義と使い方をわかりやすく解説!
- C#WPFの道#7!コントロールのスタイル定義のやり方をわかりやすく解説!
- C#WPFの道#8!グループごとのスタイル定義とBasedOnでの継承のやり方!
- C#WPFの道#9!SQLiteの使い方をわかりやすく解説!
- C#WPFの道#10!ListViewの使い方をわかりやすく解説!
- C#WPFの道#11!ListViewのフィルタリングの方法を解説!
- C#WPFの道#12!SQLiteとListViewでマスタ設定画面の作成!
- C#WPFの道#13!Buttonに画像と文字を並べる方法とRepeatButtonとToggleButton
- C#WPFの道#14!CheckBoxとIsThreeState、Indeterminateの使い方
- C#WPFの道#15!RadioButtonの書き方と使い方を解説
- C#WPFの道#16!Expanderの書き方と使い方を解りやすく解説
- C#WPFの道#17!GroupBoxの書き方と使い方を解りやすく解説
- C#WPFの道#18!Slider(スライダー)の書き方と使い方を解りやすく解説
- C#WPFの道#19!ProgressBarの書き方と使い方を解りやすく解説
- C#WPFの道#20!ComboBoxの書き方と使い方を解りやすく解説
- C#WPFの道#21!ListBoxの書き方と使い方を解りやすく解説
- C#WPFの道#22!TabControlの書き方と使い方を解りやすく解説
- C#WPFの道#23!TreeViewの書き方と使い方を解りやすく解説
- C#WPFの道#24!TextBlock,TextBoxの改行と文字の加工を解説
- C#WPFの道#25!Menuの書き方と使い方をわかりやすく解説!
- C#WPFの道#26!ToolBarの書き方と使い方をわかりやすく解説!
- C#WPFの道#27!StatusBarの書き方と使い方をわかりやすく解説!
- C#WPFの道#28!WrapPanelの書き方と使い方をわかりやすく解説!
- C#WPFの道#29!DockPanelの書き方と使い方をわかりやすく解説!
- C#WPFの道#30!Canvasの書き方と使い方をわかりやすく解説!

