UIElements を交換する必要がある WPF の小さなプロジェクトがあります。iGoogle の機能に似たもの。
写真が載せられない(評判が悪い)ので、文章で説明します。次のように定義された 3x3 グリッドがあります。
0 1 2
0 C e C
1 e e e
2 L e C
C = キャンバス、L = ラベル、e = 空のセル (列 + 行)。
MouseMove イベントでは、現在選択されているキャンバスを追跡し、グリッドで使用可能な他のすべてのキャンバスのリストを調べて、それらが重なっているかどうかを確認します。ここで問題が発生します。キャンバスを (0,0) から右に 1 ピクセル移動しているのに、(2,2) からキャンバスと交差していることを検出します。
Rect.Intersect(r1, r2) を使用して交差領域を決定していますが、r1 は r2 と重複していないため、空の Rect を返す必要がありますが、代わりに常に空でない Rect を返します。
// Create the rectangle with the moving element width and height
Size draggedElementSize = new Size(this.DraggedElement.ActualWidth, this.DraggedElement.ActualHeight);
Rect draggedElementRect = new Rect(draggedElementSize);
foreach (Canvas c in canvases)
{
// Create a rectangle for each canvas
Size s = new Size(c.ActualWidth, c.ActualHeight);
Rect r = new Rect(s);
// Get the intersected area
Rect currentIntersection = Rect.Intersect(r, draggedElementRect);
if (currentIntersection == Rect.Empty) // this is never true
return;
} // end-foreach
私はループ内で他のさまざまなことを行っていますが、これが適切に機能していないため、これとはまったく相互作用しません。
何かお役に立てば幸いです。
ありがとう。