WPF命令使用
来源:互联网 发布:知乎大学生推荐书单 编辑:程序博客网 时间:2024/05/16 06:31
What
命令包含以下部分:
命令:一个实现了ICommand接口的类,RoutedCommand是WPF里最常用的命令类,其它命令类大多派生自RoutedCommand
命令源:触发命令的对象,如button,menu等
命令目标:默认为命令源对象,显示指定CommandTarget=XXX之后,实际执行命令的对象为XXX,可通过执行函数的e.Source进行确认
命令关联:把命令源和命令以及命令的逻辑函数关联起来
why
命令可以实现一处定义,处处使用的好处。不同的命令源只要绑定同一个命令就会执行该命令绑定的执行函数。
解除前后端耦合,通过XAML绑定命令,后台代码类中可不再引用窗体控件
how
1、定义命令
1
public
static
ICommand AddCommand =
new
RoutedCommand();
2、定义命令执行函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public
void
Add(
object
sender, ExecutedRoutedEvente e)
{
MessageBox.Show(e.Parameter.ToString());
//标记为已处理,不再向上传递
e.Handled =
true
;
}
public
void
CanAdd(
object
sender, CanExecuteRoutedEvente e)
{
if
(
string
.IsNullOrEmpty(e.Parameter.ToString()))
e.CanExecute =
false
;
else
e.CanExecute =
true
;
e.Handled =
true
;
}
3、关联绑定命令和执行函数,并添加到控件的关联绑定集合
1
this
.CommandBindings.Add(
new
CommandBinding(AddCommand, Add, CanAdd));
4、绑定命令源
1
2
3
<Button Content=
"clickme"
Command=
"{x:Static local:TestWindow.AddCommand}"
CommandParameter=
"{Binding Text ,ElementName=txtMsg}"
/>
完整代码:
XAML
<Window x:Class="WpfTest.TestWindow" 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:WpfTest" mc:Ignorable="d" Title="TestWindow" Height="300" Width="300"> <StackPanel> <TextBox x:Name="txtMsg" Text="123" /> <!--第四步:把命令绑定到命令源--> <Button Content="clickme" Command="{x:Static local:TestWindow.AddCommand}" CommandParameter="{Binding Text ,ElementName=txtMsg}" /> </StackPanel></Window>
XAML.CS
using System.Windows;using System.Windows.Input;namespace WpfTest{ /// <summary> /// TestWindow.xaml 的交互逻辑 /// </summary> public partial class TestWindow : Window { //第一步:定义命令 public static ICommand AddCommand = new RoutedCommand(); //第二步:定义执行函数 public void Add(object sender, ExecutedRoutedEvente e) { MessageBox.Show(e.Parameter.ToString()); //标记为已处理,不再向上传递 e.Handled = true; } public void CanAdd(object sender, CanExecuteRoutedEvente e) { if (string.IsNullOrEmpty(e.Parameter.ToString())) e.CanExecute = false; else e.CanExecute = true; e.Handled = true; } public TestWindow() { InitializeComponent(); //第三步:关联命令和执行函数,并添加到窗体的命令绑定集 this.CommandBindings.Add(new CommandBinding(AddCommand, Add, CanAdd)); } }}
阅读全文
0 0
- WPF命令使用
- WPF使用RoutedCommand自定义命令
- WPF:命令
- wpf命令
- (WPF)命令
- WPF:命令
- wpf 命令
- WPF中的命令(一)- 使用命令的步骤
- wpf笔记--wpf命令库
- WPF中的命令简述
- WPF学习一:命令
- WPF中的命令简述
- WPF(命令)
- WPF(命令参数)
- WPF(命令)
- WPF之命令
- WPF中的命令
- WPF命令参数
- OPENCV3读取avi,解决返回NULL问题
- Android 界面流畅度调优
- 532. K-diff Pairs in an Array
- 第16周Maximum Length of Repeated Subarray
- AntDB的Oracle语法兼容性简单试用
- WPF命令使用
- Nexus3的使用
- CommandBuffer
- 如何实现安装jetty
- Android -- layer-list的基本使用介绍
- linux常用命令及用法
- 删除所有cookie或者清空所有cookie值
- JS点击图片放大预览
- 实际问题:水印平铺,以二维规则小图形对大图形进行填充问题解决