WPF命令绑定-如何获取事件处理程序

WPF命令绑定-如何获取事件处理程序,wpf,commandbinding,routedevent,routedevents,Wpf,Commandbinding,Routedevent,Routedevents,嗨 有没有办法选择XAML应该在哪里使用命令绑定事件处理程序? 我在cusotm控件中添加了命令绑定的copule,但是,对于execute和can_execute来说,这些函数不是直接在代码后面,而是在另一个类中。这个类是从Canvas派生的,我在XAML中创建了这个类的实例 <s:MyCanvas Focusable="true" Background="Transparent" x:Name="OwnCanvas" FocusVisualStyle="{x:Null}" Scro

嗨 有没有办法选择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???

我认为您必须在codebehind中转移处理程序,因为我认为这是不可能的。我可能是错的,如果可能的话,我希望得到纠正

我通常只是在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的可视树中)



将CommandTarget设置为这样,将对其调用Execute和CanExecute方法。

我认为您必须在codebehind中传输处理程序,因为我认为这是不可能的。我可能是错的,如果可能的话,我希望得到纠正

我通常只是在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的可视树中)



将CommandTarget设置为这样,将对其调用Execute和CanExecute方法。

您好,谢谢您的回答,但是我需要向整个控件添加命令绑定-我的customControl上没有任何按钮-我的控件仅由MyCanvas组成。有什么方法可以让这个工作,或者我必须将这个命令附加到一些按钮、标签或其他东西上?您好,谢谢您的回答,但是我需要将命令绑定添加到整个控件-我的customControl上没有任何按钮-我的仅由MyCanvas组成。有没有办法让这个工作,或者我必须附加这个命令到一些按钮,标签或其他东西?