0

我正在尝试创建一个包含矩形的字段。可拖动时,矩形不应超过字段的边界。是否有一个元素可以用作具有该功能的边框?

4

1 回答 1

0

没有元素可以为您管理边界检查,但容器元素的最佳选择是Canvas. 该元素使用绝对定位(例如Canvas.Left, Canvas.Top)而不是相对定位(使用Margin,HorizontalAlignmentVerticalAlignment)。这使得拖放(用于重新定位子元素)更加简单。

您需要手动确保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 的引用),但是您可以轻松地将其反转,以便由Canvasor aWindow或某物管理运动。

于 2013-07-13T13:16:42.670 回答