TOC

This article is currently in the process of being translated into Vietnamese (~97% done).

Commands:

Implementing a custom WPF Command

Trong các chướng trước, chúng ta đã thấy các cách khác nhau sử dụng COMMAND mặc định trong WPF, nhưng tất nhiên, bạn có thể triển khai các cách COMMAND tốt hơn. Nó thực sự cơ bản và một khi bạn đã làm nó, bạn có thể sử dụng các lệnh của riêng mình giống như được định nghĩa trong WPF

Cách tốt nhất để bắt đầu tạo các lệnh của tiêng bạn là có một static class sẽ chứa chúng. Mỗi COMMAND sẽ được thêm bào các lớp giống như trường tĩnh, theo cách bạn sử dụng chúng trong ứng dụng. Ở WPF, với một lý do nào đó, không thể triển khai lệnh Exit/Quit, tôi quyết định triển khai ví dụ một lệnh tùy biến. Nó giống như là:

<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
	}
}

Như trong ảnh. Tôi đã thể hiện một giao diện rất cơ bản với một MENU và một nút, Cả hai sử dụng cửa sổ mới, tùy chỉnh lệnh thoát (Exit). lệnh được định nghĩa ở Code-behind, chúng ở trong lớp CustomCommands, và được tham chiếu tới CommandBindings ở trong cửa sổ, nơi mà chúng ta chỉ định các sự kiện rằng chúng sẽ được chạy/kiểm tra nếu chúng được phép thực thi.

Tất cả các điều này giống như các ví dụ của các chương trước, ngoại trừ thực tế rằng chúng ta sử dụng mã riêng của nó (Sử dụng "self" được định nghĩa ở trên )

Trong Code-behind, chúng sẽ phản hồi với 2 sự kiện trong mã lệnh của chúng ta: Một sự kiện luôn cho phép thực thi và một phương thức Shutdown sẽ chấm dứt ứng dụng. Tất cả rất cơ bản.

Như đã giải thích, chúng ta thực hiện lệnh thoát trong lớp CustomCommands. Có vài cách để định nghĩa và gán thuộc tính cho các COMMAND. Nhưng tôi chọn một cách làm ngắn gọn hơn(Nó có thể ngắn gọn hơn nữa khi viết chúng trên cùng một dòng, nhưng tôi đã thêm các ngắt dòng cho dễ đọc hơn) nơi tôi chỉ định tất cả thông qua CONSTRUCTOR. Các thông số của text/label, tên của COMMAND, và sau đó InputGestureCollection, như tôi mặc định phím tắt (Alt + F4) cho lệnh.

Tổng kết

Tùy chỉnh Command của WPF thật sự rất dẽ dàng với các lệnh thích hợp, và nó giúp bạn sử dụng COMMAND cho mọi mục đính trong ứng dụng của bạn. Điều đó làm nó rất dễ dàng tái sử dụng ở một vài nơi giống như được đề cặp ở các ví dụ trong chương này.

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!