WPF命令绑定 - 如何访问事件处理程序

时间:2010-12-24 16:14:13

标签: wpf commandbinding routedevent routedevents

您好 有没有办法选择XAML应该使用命令绑定事件处理程序的位置? 我在我的cusotm控件中添加了命令绑定的copule,但是对于execute和can_execute来说,这些函数不是直接在代码后面而是在另一个类中。这个类派生自Canvas,我在XAML中创建了这个类的实例。

<s:MyCanvas  Focusable="true"  Background="Transparent" x:Name="OwnCanvas" FocusVisualStyle="{x:Null}" ScrollViewer.CanContentScroll="True" >

我以这种方式添加命令绑定

<UserControl.CommandBindings>
    <CommandBinding Command="{x:Static ApplicationCommands.Copy}" CanExecute="event handler from object OwnCanvas" />
</UserControl.CommandBindings>

有没有办法做到这一点?或者我必须将事件处理程序直接转移到codebehind ??

1 个答案:

答案 0 :(得分:0)

我认为你必须在代码隐藏中转移处理程序,因为我不认为这是可能的。我可能是错的,如果可能的话,我很乐意纠正。

我通常只是在MyCanvas类中定义CommandBinding(后面的代码),然后在自定义控件中将MyCanvas作为CommandTarget引用。像这样:

    public MyCanvas()
    {
        ...

        CommandBindings.Add(
            new CommandBinding(ApplicationCommands.Copy,
                (sender, e) => {
                    // Execute Stuff
                },
                (sender, e) => {
                    e.CanExecute = true; 
                    e.Handled = true; 
                }));
        ...
    }

在你的自定义控件中(假设它位于MyCanvas的可视树中)......

<Button Command="{x:Static ApplicationCommands.Copy}" CommandTarget="{Binding RelativeSource={RelativeSource AncestorType={x:Type s:MyCanvas}}}"/>

使用您的CommandTarget设置,将在其上调用Execute和CanExecute方法。