Кнопки — это один из основных и часто используемых элементов управления пользовательского интерфейса. Приложения обычно выполняют некоторую задачу при срабатывании события Click
, то есть когда пользователь щелкает по кнопке. В WPF имеется несколько типов кнопок, каждый из которых наследуется от базового класса ButtonBase
.
Элемент Button
представляет собой обычную кнопку:
<Button x:Name="MyButton" Content="Кнопка" MaxWidth="60" MaxHeight="30"/>
С этим элементом управления мы знакомились, когда писали своё первое приложение WPF. Чтобы обработать событие Click
, в WPF мы можем поступить двумя способами:
1. Определить в коде XAML кнопки атрибут Click
, указав в его значении названием метода C#, выступающего обработчиком события. Например,
<Button x:Name="MyButton" Content="Кнопка" MaxWidth="60" MaxHeight="30" Click="MyButton_Click"/>
здесь мы определяем в коде XAML атрибут Click
. Чтобы перейти к определению метода в C# достаточно нажать F12
и Visual Studio создаст метод MyButton_Click
с необходимыми параметрами. Допишем метод C# следующим образом:
private void MyButton_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Привет WPF"); }
Теперь, если запустить приложение и нажать на кнопку, то мы увидим сообщение «Привет WPF».
2. Назначить обработчик события Click
кнопки непосредственно в коде C#. Перепишем пример выше следующим образом:
<Button x:Name="MyButton" Content="Кнопка" MaxWidth="60" MaxHeight="30" />
Теперь, в коде C# назначим обработчик события Click
так как мы привыкли делать в C#:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); MyButton.Click += MyButton_Click; //назначаем обработчик события } private void MyButton_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Привет WPF"); } }
Результат выполнения программы будет тот же самый.
У кнопки Button
есть несколько своих (не унаследованных от ButtonBase
) свойств.
Свойство IsDefault
Это свойство указывает будет ли срабатывать событие Click
кнопки при нажатии пользователем клавиши Enter
на клавиатуре. Например, напишем такой код XAML:
<Button x:Name="MyButton" Content="Кнопка" MaxWidth="60" MaxHeight="30" IsDefault="True" Click="MyButton_Click" />
Обработчик события Click
возьмем из предыдущего примера. Теперь, если запустить приложение и нажать на клавиатуре Enter
, то появится сообщение «Привет WPF».
Свойство Is Cancel
Это свойство указывает будет ли срабатывать событие Click
кнопки при нажатии пользователем клавиши Esc
на клавиатуре. Можно переписать предыдущий пример, заменив в XAML свойство IsDefault
на IsCancel
, чтобы проверить работу этого свойства.
Эта кнопка аналогична предыдущей — Button
, но, при этом, позволяет управлять способом срабатывания события Click
через свойства Delay
и Interval
. Чтобы наглядно продемонстрировать как работает RepeatButton
, напишем следующий пример:
<Window x:Class="WpfApp2.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:WpfApp2" mc:Ignorable="d" Title="MainWindow" Height="275" Width="400"> <Grid> <RepeatButton x:Name="MyButton" Content="Inc" MaxWidth="60" MaxHeight="30" Click="MyButton_Click" Delay="5000" Interval="500" /> <TextBlock x:Name="TextBlock" Height="20" Margin="20,200,20,0" Text="0" TextAlignment="Center" /> </Grid> </Window>
Здесь мы определили кнопку RepeatButton
и текстовый блок в который будем выводить значение счётчика. У кнопки мы определили помимо прочего два параметра:
Delay
— интервал времени в миллисекундах по истечении которого начнет срабатывать событиеClick
кнопки.Interval
— интервал времени в миллисекундах через который будет срабатывать событиеClick
кнопки пока зажата кнопка мыши.
Код C# напишем следующим образом:
public partial class MainWindow : Window { int counter = 0; //счётчик public MainWindow() { InitializeComponent(); } private void MyButton_Click(object sender, RoutedEventArgs e) { counter++; TextBlock.Text = counter.ToString(); } }
Теперь, если запустить приложение и зажать левую кнопку мыши на кнопке, то будет следующее:
- В течение первых пяти секунд счётчик будет равен нулю
- По истечении пяти секунд с интервалом в 0,5 секунд начнет срабатывать событие
Click
кнопки, наращивая счётчик на единицу. - Как только кнопка мыши будет отпущена счётчик остановится
Следует также отметить, что у RepeatButton
отсутствуют свойства IsDefault
и IsCancel
.
Итого
Сегодня мы рассмотрели два вида кнопок в WPF — Button
и RepeatButton
. Button
— это обычная кнопка, клик по которой вызывает срабатывание события Click
по которому приложение может выполнять какие-либо действия. RepeatButton
позволяет повторять событие Click
с определенным интервалом пока зажата левая кнопка мыши на кнопке.