(C#XAML)如何将矩形保持在字段中
本文关键字:字段 C#XAML | 更新日期: 2023-09-27 18:22:08
我正在尝试创建一个包含矩形的字段。当可拖动时,矩形不应通过场地边界。有没有一个元素我可以用作边界,它正具有这个功能?
没有任何元素可以为您管理边界检查,但容器元素的最佳选项是Canvas
。该元素使用绝对定位(例如Canvas.Left
、Canvas.Top
)而不是相对定位(使用Margin
、HorizontalAlignment
和VerticalAlignment
)。这使得拖放(用于重新定位子元素)更加简单。
您需要手动确保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
事件的MouseEventArgs
和Rectangle
的原始位置来计算。在上面的摘录中,this
是子元素(它引用了ParentCanvas),但是您可以很容易地将其反转,以便Canvas
或Window
或其他东西管理移动。