我在 WPF 中有一个小项目,我需要在其中交换 UIElements。类似于 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) 来确定相交区域,它应该返回一个空的 Rect,因为 r1 不与 r2 重叠,而是它总是返回一个非空的 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
我正在循环中做其他各种事情,但它们不会以任何方式与之交互,因为它不能正常工作。
我将不胜感激任何帮助。
谢谢。