我们在Executed事件处理程序的开始处下一个断点,然后单步跟入。 ![]() 得到的结果如下: sender是主窗体。 ![]() ExecutedRoutedEventArgs的Source属性就是命令目标。 ![]() 但是,当我们运行的时候,我们发现字体变成蓝色的并不是文本框,而是按钮,为什呢? 我们仔细阅读一下MSDN文档及相关说明就知道了,因为我们没有设置Target,所以,默认的是当前获得焦点的元素将成为命令目标。 下面我们改一个上面的XAML让Button的CommandTarget指向第二个文本框。
现在运行一下,可以发现,点击按钮后,第二个文本框的前景色就变成蓝色了。 ![]() CanExecute事件和Executed事件都是路由事件,当然,RouteCommand类也包含遂道事件,至于什么是路由事件,什么是遂道事件,不在本文讲述的范围之中。 以路由事件为例,下面我们来做第二个示例。这个示例,窗体上有一个StackPanel,里面包含一个按钮,同时,把CommandBinding添加到该StackPanel上,而该StackPanel里面再嵌套一个DockPanel,同样,把同一个命令也添加到DockPanel上,DockPanel里面再包含一个Canvas,但是Canvas不添加CommandBinding,然后,在Executed事件处理程序中分别输出引发事件的类型,命令目标类型和目标的Name属性的值。
[XAML] |