1

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" で定義されているように、EventTriggers を使用してビュー モデルで定義されたコマンドを使用しようとしています。

コントロールを Microsoft.Surface.Presentation.Controls.SurfaceSlider 派生コントロールから通常の WPF ボタンに変更しました。Button では、EventName="MouseEnter" を使用すると同じ ConfirmOrderCommand が起動されますが、EventName="Click" を使用すると何も起こりません。ボタンの XAML はこちらです。

<Button Name="ConfirmButton"
          IsEnabled="{Binding IsEnabled}"
          Style="{StaticResource  ConfirmButtonStyle}"
          >
    <i:Interaction.Triggers>
      <i:EventTrigger EventName="Click">
        <i:InvokeCommandAction Command="{Binding ConfirmOrderCommand}"/>
      </i:EventTrigger>
    </i:Interaction.Triggers>
  </Button>

ユーザーがボタンをクリックしてコマンドを実行できるようにしたい。Click イベントを Button で機能させることはできますか? それとも、別のイベントを探す必要がありますか? また、MouseLeftButtonUp を機能させることもできませんでした。

4

2 に答える 2

1

EventName="Button.Click" を試してください。とにかく、ボタン自体の Command プロパティを設定し、Interaction.Triggers 部分を削除するだけです。

于 2012-10-31T19:45:00.750 に答える
1

Button.Click が機能しない実際の理由は、多くの苦労の末に決定され、最終的には朝起きた後にプロジェクトの誰かに尋ねました。

私たちのアプリケーションは、FrameworkElement Preview デリゲートでほぼすべての Button イベントを盗んでいました。

public static void RegisterEvents(FrameworkElement parent)
{
    parent.PreviewMouseDown += MouseDown;
    parent.PreviewMouseUp += MouseUp;
    // even more of these
}

デリゲートは、MouseDown などの場合に System.Window.Input.TouchDevice を ReportDown() に使用します。この間ずっと、標準の WPF ボタンが通常どのように機能するのかわからないと思っていました。この話の教訓は、イベントは子コントロールから開始して、Handled = true になるまでコンテナーに伝播する必要がないということだと思います。プレビューを使用すると、コンテナは最初にイベントをキャプチャできます。

于 2012-11-14T15:02:28.263 に答える