7

指定されたメソッドを呼び出す MouseDown 属性と MouseUp 属性を持つ XAML で宣言されたボタンがあります...

<Button x:Name="btnBackward" Content="Backward"
        MouseDown="btnBackward_MouseDown" 
        MouseUp="btnBackward_MouseReleased" Width="50" Height="25" 
        Margin="65,400,377,45"/>

ただし、メソッド btnBackward_MouseReleased は呼び出されません。

private void btnBackward_MouseReleased(object sender, 
                                       System.Windows.Input.MouseEventArgs e)
{
    Console.WriteLine("mousereleased");
    this.isRewinding = false;
}

何が足りないの?

4

1 に答える 1

14

ここを使うべきPreview eventsです。したがって、 and の代わりにMouseDownandMouseUpにフックしPreviewMouseDownますPreviewMouseUp

<Button x:Name="btnBackward" Content="Backward"
        PreviewMouseDown="btnBackward_MouseDown" 
        PreviewMouseUp="btnBackward_MouseReleased"/>

理由フォームMSDN -

Button は、Button またはその複合要素によって発生する MouseLeftButtonDown および MouseLeftButtonDown バブリング イベントを抑制し、マウスをキャプチャして、常に Button 自体によって発生する Click イベントを発生させます。イベントとそのデータは引き続きルートに沿って続きますが、Button はイベント データを Handled としてマークするため、handledEventsToo ケースで動作する必要があることを明確に示したイベントのハンドラーのみが呼び出されます。アプリケーションのルートにある他の要素が、コントロールによって抑制されたイベントを処理する機会をまだ必要としている場合、1 つの代替手段は、handledEventsToo を true に指定して、コードでハンドラーをアタッチすることです。しかし、多くの場合、処理するルーティング方向を入力イベントと同等のプレビューになるように変更するのがより簡単なテクニックです。たとえば、コントロールが MouseLeftButtonDown を抑制する場合は、代わりに PreviewMouseLeftButtonDown のハンドラーをアタッチしてみてください

ただし、ボタンを右クリックするMouseUpと、MouseDownイベントは完全に機能します。その場合、クリックしてもイベントが消費されず、適切にバブルアップされるためです。

于 2013-08-21T18:07:11.457 に答える