Categories: WPF 教程

WPF教程之 实现自定义WPF命令

WPF命令:

实现自定义WPF命令

在上一章中,我们研究了使用WPF中已定义的命令的各种方法,当然您也可以实现自己的命令。它非常简单,一旦你完成它,就可以使用自己的命令,就像在WPF中定义的命令一样。

开始实现自己的命令的最简单方法是使用包含它们的静态类。然后将每个命令作为static字段添加到此类,允许您在应用程序中使用它们。由于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
 }
}

在标记中,我定义了一个带菜单和按钮的非常简单的界面,它们都使用我们新的自定义Exit命令。此命令在我们自己的CustomCommands类中的代码隐藏中定义,然后在窗口的CommandBindings集合中引用,我们在其中分配应该用于执行/检查是否允许执行的事件。

所有这些都与前一章中的示例类似,只是我们从我们自己的代码引用命令(使用顶部定义的“self”命名空间)而不是内置命令。

在Code-behind中,我们响应命令的两个事件:一个事件只允许命令一直执行,因为对于exit / quit命令通常是这样,而另一个事件调用Shutdown方法将终止我们的命令应用。一切都很简单。

如前所述,我们将Exit命令实现为静态CustomCommands类的字段。有几种方法可以在命令上定义和分配属性,但是我选择了更紧凑的方法(如果放在同一条线上会更紧凑,但为了便于阅读,我在这里添加了换行符)所有这一切都通过构造函数。参数是命令的文本/标签,命令的名称,所有者类型,然后是InputGestureCollection,允许我为命令定义默认快捷方式(Alt + F4)。

小结

实现自定义WPF命令几乎与使用内置命令一样简单,它允许您在应用程序中为每个目的使用命令。这使得在多个地方重复使用操作变得非常容易,如本章示例所示。

terry

这个人很懒,什么都没有留下~

Share
Published by
terry

Recent Posts

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

21 分钟 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

7 天 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

1 周 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

2 周 ago

聊聊React和Vue组件更新的实现及区别

React 和 Vue 都是当…

3 周 ago