TOC

This article has been localized into Ukrainian by the community.

Команди:

Реалізація власних WPF команд

У попередній статті ми використовували команди, вбудовані у WPF, але, звичайно, ви так само можете реалізувати ваші власні команди. Це досить просто, крім того, створивши команду, ви можете використовувати їх, як і вбудовані у WPF.

Найпростіший спосіб реалізувати ваші власні команди – створити статичний клас. Після цього слід додати статичні поля, що містять команди. Оскільки WPF не містить команди "Вийти", то я вирішив реалізувати її для прикладу:

<Window x:Class="WpfTutorialSamples.Commands.CustomCommandSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:self="clr-namespace:WpfTutorialSamples.Commands"
        Title="CustomCommandSample" Height="150" Width="200">
    <Window.CommandBindings>
        <CommandBinding Command="self:CustomCommands.Exit" CanExecute="ExitCommand_CanExecute" Executed="ExitCommand_Executed" />
    </Window.CommandBindings>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Menu>
            <MenuItem Header="File">
                <MenuItem Command="self:CustomCommands.Exit" />
            </MenuItem>
        </Menu>
        <StackPanel Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button Command="self:CustomCommands.Exit">Exit</Button>
        </StackPanel>
    </Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Input;

namespace WpfTutorialSamples.Commands
{
	public partial class CustomCommandSample : Window
	{
		public CustomCommandSample()
		{
			InitializeComponent();
		}

		private void ExitCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
		{
			e.CanExecute = true;
		}

		private void ExitCommand_Executed(object sender, ExecutedRoutedEventArgs e)
		{
			Application.Current.Shutdown();
		}
	}

	public static class CustomCommands
	{
		public static readonly RoutedUICommand Exit = new RoutedUICommand
			(
				"Exit",
				"Exit",
				typeof(CustomCommands),
				new InputGestureCollection()
				{
					new KeyGesture(Key.F4, ModifierKeys.Alt)
				}
			);

		//Define more commands here, just like the one above
	}
}

У розмітці я створив дуже простий інтерфейс, що містить меню та кнопку. Вони обидва містять кнопку з командою виходу. В C# коді ця команда визначена у класі CustomCommands. Крім того, вона знаходиться в колекції CommandBindings вікна, де ми визначаємо події.

Все це, схоже на приклади з попереднього розділу, за винятком того, що ми використовуємо команди з нашого власного коду (використовуючи власний простір імен, визначений в горі файлу) замість вбудованих команд.

В C# коді ми відповідаємо за дві події для наших команд. Одна з них просто дозволяє команді виконуватися будь-коли, як це звично буває з подібними командами. Інша викликає метод Shutdown, що закриває застосунок. Все дуже просто.

Як я вже пояснив, ми реалізували команду "Вихід", як поле статичного класу CustomCommands. Є кілька способів визначення та присвоєння властивостей команд, однак я вибрав найкомпактніший підхід (можна було скоротити ще більше, помістивши все в один рядок, але я не став цього робити для читабельності), при якому я визначив усе в конструкторі. Параметри – це підписи команд, їхні назви, тип власника та InputGestureCollection, що дозволяє вибрати комбінацію клавіш за умовчуванням (Alt+F4).

Підсумок

Реалізація власних WPF команд така ж проста, як і використання вбудованих команд. Завдяки цьому підходу ви зможете використовувати команди для будь-якої мети у застосунку. Завдяки цьому можна з легкістю повторно використовувати одні й ті ж дії в різних місцях, як це показано у статті.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!