0

私はWindowsストアアプリケーションに取り組んでおり、最初に押されたボタンが非アクティブになり、新しく「ドラッグされた」ボタンがアクティブになるようにボタン間をドラッグできるようにしたいのですが、これを機能させることができないようです。

StackPanel 内に 2 つのボタンがあり、それらにあるイベントは次のとおりです。

  • PointerPressed
  • ポインターが入力されました
  • ポインターが解放されました
  • ポインターが終了しました
  • ポインターがキャンセルされました
  • ポインターのキャプチャーロスト

PointerPressed と PointerEntered は同じイベント ハンドラーを共有し、残り (「非アクティブ化」イベント) は同じイベント ハンドラーを共有します。

1 つのボタンを押すと、「アクティブ化された」イベント ハンドラーがトリガーされ、ドラッグすると「非アクティブ化された」イベント ハンドラーがトリガーされますが、2 番目のボタンにドラッグしても、「アクティブ化された」イベント ハンドラーは再度トリガーされません。

奇妙なことに、StackPanel からボタンの 1 つにドラッグして開始すると、「アクティブ化された」イベント ハンドラーがトリガーされます。内部のポインター管理に関係していると思いますが、回避策が見つからないようです。

なぜこれが起こっているのか、どうすれば私が望むように動作させることができるのか誰にも分かりますか?

御時間ありがとうございます。

編集

さて、私はいくつかのことを調査していて、CapturePointer() と ReleasePointerCapture() に出くわしましたが、これは壊れているようです - ポインターをキャプチャすると、画面から指を離しても、PointerReleased はヒットしません。 .

また、「SPからボタンの1つにドラッグすると、ボタンが「アクティブ化」される」理由もわかりました-これは、ボタンが押されたときにイベントをルーティングせずにクリックイベントを発生させるためです-同じことを意味しますポインターは別のボタンの PointerEntered イベントを発生させることはできませんが、ボタンの外で開始すると PointerEntered をトリガーします。

これは私をさらに先に進めませんが、少し余分な情報です:)

4

1 に答える 1

1

Button の概念は、マウス キャプチャとそこからドラッグする方法に関して少し独特です。あなたのシナリオでは、Button の周りのイベント モデルが正しく機能するかどうかわかりません。ボタンでは、ポインターが押されると (マウス)、離されるまでキャプチャーされます。タッチでは、作成しない限り明示的なキャプチャがないため、押してドラッグする操作が異なるタッチでは同じではありません。

したがって、ボタンを使用すると、とにかくマウス/タッチ操作の間でわずかな競合が発生します-他のUI要素(スタイル付きのボタンがあるかどうかはわかりません)を使用すると、必要なものが得られます.

于 2013-08-21T15:24:59.240 に答える