我正在尝试创建一个包含矩形的字段。可拖动时,矩形不应超过字段的边界。是否有一个元素可以用作具有该功能的边框?
问问题
69 次
1 回答
0
没有元素可以为您管理边界检查,但容器元素的最佳选择是Canvas
. 该元素使用绝对定位(例如Canvas.Left
, Canvas.Top
)而不是相对定位(使用Margin
,HorizontalAlignment
和VerticalAlignment
)。这使得拖放(用于重新定位子元素)更加简单。
您需要手动确保Rectangle
不会越过 parent 的边缘Canvas
,但这很容易。它看起来像:
private void DoMoveX(double left, double xOffset)
{
if (left + xOffset < 0)
Canvas.SetLeft(this, 0);
else if (left + xOffset > ParentCanvas.ActualWidth - this.ActualWidth)
Canvas.SetLeft(this, ParentCanvas.ActualWidth - this.ActualWidth);
else
Canvas.SetLeft(this, GetSnapValue(left + xOffset));
}
其中 xOffset 可以根据MouseEventArgs
事件的MouseMove
和 的原始位置来计算Rectangle
。在上面的摘录中,this
是子元素(它具有对 ParentCanvas 的引用),但是您可以轻松地将其反转,以便由Canvas
or aWindow
或某物管理运动。
于 2013-07-13T13:16:42.670 回答