Элементы управления в WPF. Кнопки

Кнопки — это один из основных и часто используемых элементов управления пользовательского интерфейса. Приложения обычно выполняют некоторую задачу при срабатывании события Click, то есть когда пользователь щелкает по кнопке. В WPF имеется несколько типов кнопок, каждый из которых наследуется от базового класса ButtonBase.

Button

Элемент 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».

Свойство IsCancel

Это свойство указывает будет ли срабатывать событие Click кнопки при нажатии пользователем клавиши Esc на клавиатуре. Можно переписать предыдущий пример, заменив в XAML свойство IsDefault на IsCancel, чтобы проверить работу этого свойства.

RepeatButton

Эта кнопка аналогична предыдущей — 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();
    }
}

Теперь, если запустить приложение и зажать левую кнопку мыши на кнопке, то будет следующее:

  1. В течение первых пяти секунд счётчик будет равен нулю
  2. По истечении пяти секунд с интервалом в 0,5 секунд начнет срабатывать событие Click кнопки, наращивая счётчик на единицу.
  3. Как только кнопка мыши будет отпущена счётчик остановится

Следует также отметить, что у RepeatButton отсутствуют свойства IsDefault и IsCancel.

Итого

Сегодня мы рассмотрели два вида кнопок в WPFButton и RepeatButton. Button — это обычная кнопка, клик по которой вызывает срабатывание события Click по которому приложение может выполнять какие-либо действия. RepeatButton позволяет повторять событие Click с определенным интервалом пока зажата левая кнопка мыши на кнопке.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии