0

私は非常に単純で基本的なことをしようとしています。私が間違っている場合は修正してください:

シンプルなボタンとそれに関連付けられたメソッドを次のように考えてください。ただし、DrawShapeCanExecute() で戻り値の型を変更すると、次のようなエラー メッセージが表示されます。

bool WpfApplication8.DrawingCanvas.DrawShapeCanExecute(object, System.Windows.Input.CanExecuteRoutedEventArgs)' の戻り値の型が間違っています

public static RoutedCommand DrawShape = new RoutedCommand();


private void DrawShapeCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true; 
} **//Isn't this enough to make it enable?**



private void DrawShape_Executed(object sender, ExecutedRoutedEventArgs e)
{

}

その xaml 部分には次のものがあります。

<Button Margin="0,2,2,2" Width="70" Content="Line" 
        Command="{x:Static local:DrawingCanvas.DrawShape}"
        CommandTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
            AncestorType={x:Type Window}}, Path=DrawingTarget}"
        CommandParameter="Line">           
</Button>
4

3 に答える 3

2

イベントを処理済みとしてマークする必要があります。

e.CanExecute = true;
e.Handled = true;
于 2012-10-03T22:19:49.117 に答える
0

http://msdn.microsoft.com/en-us/library/system.windows.input.routedcommand.aspxから、CanExecute および Executed ハンドラーをバインドする必要があることがわかります。次のようになります。

<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:DrawingCanvas.DrawShape }"
                Executed="DrawShape_Executed"
                CanExecute="DrawShapeCanExecute" />
</Window.CommandBindings>

<Button Margin="0,2,2,2" Width="70" Content="Line" 
    Command="{x:Static local:DrawingCanvas.DrawShape}"
    CommandTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
        AncestorType={x:Type Window}}, Path=DrawingTarget}"
    CommandParameter="Line">           
</Button>
于 2012-10-03T22:25:11.513 に答える
0

このステートメントを MainWindow.xaml.cs に追加すると解決します。

public IInputElement DrawingTarget { get { return _canvas; } }

ポイントは、フォームではなくキャンバスにメニューバーを追加していることです。

于 2012-10-04T23:06:54.327 に答える