(C#XAML)如何将矩形保持在字段中

本文关键字:字段 C#XAML | 更新日期: 2023-09-27 18:22:08

我正在尝试创建一个包含矩形的字段。当可拖动时,矩形不应通过场地边界。有没有一个元素我可以用作边界,它正具有这个功能?

(C#XAML)如何将矩形保持在字段中

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

您需要手动确保Rectangle不会越过父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可以根据MouseMove事件的MouseEventArgsRectangle的原始位置来计算。在上面的摘录中,this是子元素(它引用了ParentCanvas),但是您可以很容易地将其反转,以便CanvasWindow或其他东西管理移动。