2

嗨,有什么方法可以选择 XAML 应该在哪里使用命令绑定事件处理程序?我在我的 cusotm 控件中添加了一些命令绑定,但是对 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>

有什么办法吗?或者我必须将事件处理程序直接转移到代码隐藏?

4

1 回答 1

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 方法。

于 2010-12-24T18:11:32.253 回答