亚洲必赢手机简言之了然,简单精通

by admin on 2019年1月15日

命令(Command)

命令(Command)

2018/1/10 19:06:35

一声令下可以约束代码,仍可以约束步骤逻辑。(事件的意义是揭橥和传播一些音信,对什么响应事件不做规定,每个接收者可以采用自己的表现来响应事件。也就是说事件不拥有约束力)

2018/1/10 19:06:35

指令可以约束代码,仍可以约束步骤逻辑。(事件的功用是宣布和传唱一些信息,对哪些响应事件不做规定,每个接收者可以采纳自己的一言一行来响应事件。也就是说事件不拥有约束力)

一声令下系统的骨干元素

·命令(Command):实际上就是实现了ICommand接口的类,平常应用最多的是RoutedCommand类
·命令源(Command Source):实现了ICommandResource接口的类(Button)
·命令目的(Command Target):必须是兑现了IInputCommand接口的类
·命令关联(Command
Binding):负责把外场逻辑与命令关联起来,比如执行从前对命令是否能够执行举办判定、命令执行后还有什么后续工作等

一声令下系统的主干因素

·命令(Command):实际上就是兑现了ICommand接口的类,平常利用最多的是RoutedCommand类
·命令源(Command Source):实现了ICommandResource接口的类(Button)
·命令目的(Command Target):必须是兑现了IInputCommand接口的类
·命令关联(Command
Binding):负责把外围逻辑与命令关联起来,比如执行以前对命令是否可以执行举行判断、命令执行后还有什么样后续工作等

一声令下的应用

命令的利用

1.创建命令类

即拿到一个兑现ICommand接口的类,倘使命令与具体事情逻辑无关,则应用WPF类库中的RoutedCommand即可。尽管想取得与工作逻辑相关的专有命令,则需要创制RoutedCommand(或者ICommand)的派生类。

1.创制命令类

即得到一个兑现ICommand接口的类,假如命令与具体业务逻辑无关,则利用WPF类库中的RoutedCommand即可。假诺想赢得与工作逻辑相关的专有命令,则需要创设RoutedCommand(或者ICommand)的派生类。

2.扬言命令实例

技巧:一般景象下,只需要操作一个下令实例与之对应即可。由此先后中的命令多应用单件形式(Singletone
Pattern)以缩减代码复杂度。

2.宣称命令实例

技巧:一般情状下,只需要操作一个命令实例与之对应即可。因而先后中的命令Dolly用单件情势(Singletone
Pattern)以压缩代码复杂度。

3.点名命令源

命令源拥有命令和命令源五个属性。
同一个发令可以有六个源。
比方把命令指派给命令源,命令源就会受命令影响,命令不可以实施的时候作为命令源的控件不可用。革命临官发送命令的法子不尽相同,例如单机双击。

3.点名命令源

命令源拥有命令和命令源六个属性。
同一个发令可以有多少个源。
倘诺把命令指派给命令源,命令源就会受命令影响,命令不可能履行的时候作为命令源的控件不可用。革命临官发送命令的方法不尽相同,例如单机双击。

4.点名命令目的

一声令下目的不是命令的属性而是命令源的属性。无论那多少个命令源是否具有大旨都会接收这些命令。如果没有点名命令目标,默认为当前问题对象就是命令目的。

4.点名命令目的

指令目的不是命令的习性而是命令源的习性。无论这些命令源是否享有核心都会接收这个命令。即便没有点名命令目标,默认为当前热点对象就是命令目的。

5.装置命令关联(命令绑定)

WPf需要CommandBinding在推行前救助判断是不是可以举行,在履行后做一些事变来“打扫战场”。命令目标向命令关联发送路由事件,命令关联捕捉并拍卖路由事件,向命令反馈信息。

5.装置命令关联(命令绑定)

WPf需要CommandBinding在实施前救助判断是不是足以推行,在实践后做一些风波来“打扫战场”。命令目标向命令关联发送路由事件,命令关联捕捉并处理路由事件,向命令反馈信息。

1.ICommand接口包含两个主意和一个风波

Execute()方法包含应用程序逻辑(例如打印文档);
CanExecute()方法重回命令状态(命令可用重返true,不可用重返false);
CanExecuteChanged事件,命令状态改变时引发,这是提醒信号,表示应当调用CanExecute()检查命令状态。

1.ICommand接口包含六个艺术和一个风波

Execute()方法包含应用程序逻辑(例如打印文档);
CanExecute()方法再次回到命令状态(命令可用重临true,不可用重返false);
CanExecuteChanged事件,命令状态改变时引发,这是指示信号,表示应当调用CanExecute()检查命令状态。

2.RoutedCommand类自动实现ICommmand接口的类

不分包其他应用程序逻辑,只表示命令。为事件冒泡和隧道添加了有些卓殊的根底结构

2.RoutedCommand类自动实现ICommmand接口的类

不包含其他应用程序逻辑,只代表命令。为事件冒泡和隧道添加了有些分外的根基结构

3.RoutedUICommand类继承自RoutedCommand类

用于所有文本的授命,只扩张了Text属性

3.RoutedUICommand类继承自RoutedCommand类

用于所有文本的下令,只扩张了Text属性

执行命令

RoutedUIIcommand类没有此外编码的效果,只表示命令。为触发命令,需要有命令源(也可采纳代码)。为响应命令,需要有发号施令绑定,命令绑定将实施转发给普通的事件处理程序。

执行命令

RoutedUIIcommand类没有此外编码的功能,只表示命令。为触发命令,需要有命令源(也可使用代码)。为响应命令,需要有指令绑定,命令绑定将推行转发给普通的事件处理程序。

1.命令源

ICommandSource定义了五个特性:
·Command:指向连接的通令,必需
·CommandParameter:提供其他希望随命令发送的多寡
·CommandTarget:确定将在其中执行命令的要素
譬如说:下边的按钮使用Command属性连接到ApplicationCommands.New命令:

<Button Command="ApplicationCommands.New">New</Button>
1.命令源

ICommandSource定义了两个特性:
·Command:指向连接的吩咐,必需
·CommandParameter:提供任何希望随命令发送的数目
·CommandTarget:确定将在其间执行命令的要素
诸如:上面的按钮使用Command属性连接到ApplicationCommands.New命令:

<Button Command="ApplicationCommands.New">New</Button>
2.命令绑定

明确:
·当命令被触发时执行怎么着操作
·怎样规定命令是否能被实施(可选)
·命令在何地起效果

2.命令绑定

明确:
·当命令被触发时执行咋样操作
·如何规定命令是否能被执行(可选)
·命令在什么地方起功能

命令实例:

概念一个命令,使用Button来发送这些命令,当命令送达TextBox时,TextBox被清空(即便没有文字则不发送命令)
·界面代码:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Command"
    Background="LightBlue" Height="350" Width="525">
<StackPanel x:Name="stackPanel">
    <Button x:Name="button1" Content="Send Command" Margin="5"/>
    <TextBox x:Name="textBoxA" Margin="5,0" Height="100"/>
</StackPanel>
</Window>

·后台代码:

//实现:定义一个命令,使用Button来发送这个命令,当命令送达TextBox时,TextBox被清空(如果没有文字则不发送命令)

namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        InitializeCommand();
    }
    //声明并定义命令
    private RoutedCommand clearCmd = new RoutedCommand("CLear", typeof(MainWindow));

    private void InitializeCommand()
    {
        //把命令赋值给命令源(发送者)并指定快捷键
        this.button1.Command = this.clearCmd;
        this.clearCmd.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Alt));//按Alt+C键

        //指定命令目标
        this.button1.CommandTarget = this.textBoxA;

        //创建命令关联
        CommandBinding cb = new CommandBinding();
        cb.Command = this.clearCmd;//只关注与clearCmd相关的事件
        cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute);
        cb.Executed +=new ExecutedRoutedEventHandler(cb_Executed);

        //把命令关联安置在外围控件上
        this.stackPanel.CommandBindings.Add(cb);
    }

    //当探测命令是否可以执行时,此方法被调用
    void cb_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        if(string.IsNullOrEmpty(this.textBoxA.Text))
        { e.CanExecute = false; }
        else
        { e.CanExecute = true; }

        //避免继续向上传而降低程序性能
        e.Handled = true;
    }

    //当命令送达目标后,此方法被调用
    void cb_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        this.textBoxA.Clear();
        //避免继续向上传而降低程序性能
        e.Handled = true;
    }
}

解释:
·运行程序,在TextBox中输入文字后Button在指令可举行情形的境况下成为可用,此时单击Button或者按Alt+C键,TextBox都会被清空。
·RoutedCommand并不对命令目标做其他操作,而是由CommandBinding操作的。
·无论是探测命令是否举办或者命令送达目的,都会点燃命令目的发送路由事件,这么些路由事件会沿着UI元素树向上传递并最后被CommandBinding所捕捉。
·CommandBinding被装置在外边的StackPanel上,CommandBinding起一个侦听器的职能,而且特别针对clearCmd命令捕捉与其有关的路由事件。
·当CommandBinding捕捉到CanExecute事件,就会调用cb_CanExecute方法判断命令执行尺度是否满足,并反映给命令供其影响命令源的景观;当捕捉到Execute事件,表示命令的Execute方法已经履行了,或者说命令已经意义在了指令目的上(RoutedCommand只担负让命令目的激发Executed),则调用Executed方法。
·CommandBingding一定要安装在命令目标的外界控件上,不然无法捕捉到CanExecute和Executed等路由事件。

命令实例:

概念一个命令,使用Button来发送这么些命令,当命令送达TextBox时,TextBox被清空(即使没有文字则不发送命令)
·界面代码:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Command"
    Background="LightBlue" Height="350" Width="525">
<StackPanel x:Name="stackPanel">
    <Button x:Name="button1" Content="Send Command" Margin="5"/>
    <TextBox x:Name="textBoxA" Margin="5,0" Height="100"/>
</StackPanel>
</Window>

·后台代码:

//实现:定义一个命令,使用Button来发送这个命令,当命令送达TextBox时,TextBox被清空(如果没有文字则不发送命令)

namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        InitializeCommand();
    }
    //声明并定义命令
    private RoutedCommand clearCmd = new RoutedCommand("CLear", typeof(MainWindow));

    private void InitializeCommand()
    {
        //把命令赋值给命令源(发送者)并指定快捷键
        this.button1.Command = this.clearCmd;
        this.clearCmd.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Alt));//按Alt+C键

        //指定命令目标
        this.button1.CommandTarget = this.textBoxA;

        //创建命令关联
        CommandBinding cb = new CommandBinding();
        cb.Command = this.clearCmd;//只关注与clearCmd相关的事件
        cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute);
        cb.Executed +=new ExecutedRoutedEventHandler(cb_Executed);

        //把命令关联安置在外围控件上
        this.stackPanel.CommandBindings.Add(cb);
    }

    //当探测命令是否可以执行时,此方法被调用
    void cb_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        if(string.IsNullOrEmpty(this.textBoxA.Text))
        { e.CanExecute = false; }
        else
        { e.CanExecute = true; }

        //避免继续向上传而降低程序性能
        e.Handled = true;
    }

    //当命令送达目标后,此方法被调用
    void cb_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        this.textBoxA.Clear();
        //避免继续向上传而降低程序性能
        e.Handled = true;
    }
}

解释:
·运行程序,在TextBox中输入文字后Button在指令可举行情况的情景下成为可用,此时单击Button或者按Alt+C键,TextBox都会被清空。
·RoutedCommand并不对命令目标做另外操作,而是由CommandBinding操作的。
·无论是探测命令是否实施或者命令送达目标,都会刺激命令目的发送路由事件,这么些路由事件会顺着UI元素树向上传递并最终被CommandBinding所捕捉。
·CommandBinding被设置在外头的StackPanel上,CommandBinding起一个侦听器的功用,而且特别针对clearCmd命令捕捉与其休戚相关的路由事件。
·当CommandBinding捕捉到CanExecute事件,就会调用cb_CanExecute方法判断命令执行标准是否满意,并举报给命令供其震慑命令源的状态;当捕捉到Execute事件,表示命令的Execute方法已经执行了,或者说命令已经意义在了命令目标上(RoutedCommand只负责让命令目的激发Executed),则调用Executed方法。
·CommandBingding一定要设置在指令目的的外面控件上,不然不能捕捉到CanExecute和Executed等路由事件。

命令库

指令具有“一处注明,处处使用”的特征。便携的命令库包括:ApplicationCommands,ComponentCommands,NavigationCommands,MediaCommands,EditingCommands.都是静态类。例如大家得以一向拿命令库用这一个专业命令,不需要协调讲明:Open,Save,Play,Stop。(属于ApplicationCommand)

命令库

一声令下具有“一处讲明,处处使用”的风味。便携的命令库包括:ApplicationCommands,ComponentCommands,NavigationCommands,MediaCommands,EditingCommands.都是静态类。例如我们可以直接拿命令库用那一个标准命令,不需要自己声明:Open,Save,Play,Stop。(属于ApplicationCommand)

自定义Command

———————待更新

自定义Command

———————待更新

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图