1

これは、MS Surface の SDK サンプル ショッピング カートと (一種の) 類似した状況です。

2 つの ScatterViews を持つアプリケーションがあります。1 つ目は、サーフェス ウィンドウ全体 (「サーフェス」) をカバーします。2 つ目は、TagVisualization オブジェクト (「ポッド」) にあります。複数のポッドが使用可能である可能性があります (テーブルで複数のタグがダウンしている場合)。

ScatterViewItem を「ポッド」から「サーフェス」または別の「ポッド」にドラッグできるようにしたいと考えています。ScatterViewItem が ScatterView 親を離れているかどうかを検出するのに問題はありません。また、ScatterViewItem の親を変更しても問題ありません。

ただし、アイテムがドラッグされている ScatterView を検出したいと考えています。SDK サンプルでは、​​ScatterViews の下にあるビジュアル要素 (この場合は楕円) を使用しています。VisualTreeHelper.HitTest は、接触が楕円上にあるかどうかを判断するために使用されます。その場合、「接続された」ScatterView が見つかります。

これは非常にエレガントなソリューションではないと思います。連絡先が ScatterView の上にあるかどうかを検出するためだけに、そこに視覚要素を入れたくありません。

この種の「ヒットテスト」を達成するためのより良い方法はありますか?

ありがとう、バート

4

1 に答える 1

1

まず第一に、Surfaceを使用すると、ドラッグアンドドロップがすぐに簡単になるという予感があります。そのため、追加の要素をいじくり回すのにあまり時間をかけません。

しかし、これをより一般的な質問として扱う-ヒットテストを行うためだけに視覚要素を追加する必要は必ずしもありませんが、ヒットテストは、特定のポイントに特定の要素があるかどうかを判断するための最良の方法です。

あなたが話しているサンプルは、ヒットテスト用の楕円を追加しただけでなく、「ポッド」の背景としても機能していました。そのため、その楕円が境界を定義しているため、接触がその楕円の上にあるときにのみドロップを処理したかったのです。別のルートは、スキャッタービューの背景を設定し、そのコントロールに対してヒットテストを実行することです。次に、「ポッド」の境界を長方形以外に変更する場合は、スキャッタビューにクリッピングパスを適用する必要があります。

于 2009-04-07T20:50:11.583 に答える