2

こんにちは、XAML がコマンド バインディング イベント ハンドラーを使用する場所を選択する方法はありますか? カスタム コントロールにコマンド バインディングのコプルを追加しましたが、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 に答える