0

UserControlオブジェクトをあるCanvasから別のCanvasにドラッグして、そこにドロップするつもりです。目的地にマウスを合わせると、ドラッグされたオブジェクトが実際に目的地の下に入ります。DragEnter、DragOver、またはDragLeaveイベントが発生しません。オブジェクトをそこにドロップすると、Dropイベントは発生しません。

私のルートオブジェクトは境界線であり、次にグリッドです。グリッドはブラウザクライアント領域全体をカバーします。8列あります。各列には、XAMLによって配置されるキャンバスがあります。

奇妙な動作の例:アイテムを列3から列4(またはそれ以上)にドラッグすると、オブジェクトがキャンバスの下にスライドします。列3から列2(またはそれ以下)にドラッグすると、オブジェクトが上をスライドします。したがって、zorderはCanvasの作成順序の影響を受けるようです。誰かがこれを明確にすることができますか?

各列のCanvasオブジェクトには、DragEnter / Leaveイベントが関連付けられていますが、オブジェクトがCanvasの上にあるか下にあるかに関係なく、いずれも起動しません。

マウスイベントを取得するには、Canvasに背景が必要であることがわかりました。列の各キャンバスには背景があります。何もドラッグしていない場合、マウスイベントが発生します。

私はロープの終わりに近づいています、そして確かにいくつかの援助をいただければ幸いです。

ありがとう、グレッグ

4

1 に答える 1

0

@toxoplasmotic: はい。

RE: イベントが発生しません。結局のところ、Drag イベントは接続されていますが、機能を提供していません。

RE: さまざまなドロップ ターゲット キャンバスの下/上にドラッグします。キャンバスの作成の「自然な順序」によって確立された、ある種のズオーダがあるようです。

しかし、これらは重要なポイントではありません。

解決策 1. Silverlight 3 では、新しい Expression Blend Behavior: MouseDragElementBehavior が導入されました。かなりのドラッグ/ドロップ機能がカプセル化されています。SL4に保存されています。

解決策 2. codeplex には、(実験段階で) ドラッグ アンド ドロップ機能の非常に優れたカプセル化を備えた Silverlight Toolkit があります。リストボックスやツリービューなどを扱っていない場合、これには少し余分なコーディングが必要になるようです.

解決策 3. しかし、キャッパーはこれです: アレックス・ヴァン・ビークのかなりよく文書化されたコードを使用して、ドラッグ/ドロップを行うのは非常に簡単です. ここにあります: http://blogs.infosupport.com/blogs/alexb/a​​rchive /2009/09/07/A-complete-Silverlight-3-drag-and-drop-solution.aspx

成功の鍵は、ドラッグされたオブジェクトをその親から切り離し、ブラウザ ウィンドウの抽象化 (通常はルート オブジェクトまたは透明な別のキャンバス) に関連付けることです。難しいこと (それほど難しいことではありません) は、さまざまな座標系を同期させておくことです。("from" キャンバス、"to" キャンバス、ドラッグされたオブジェクト)

乾杯!グレッグ

于 2010-07-13T05:05:29.677 に答える