控件(边框,网格等)在c#中拖动时调整大小
本文关键字:拖动 调整 边框 网格 控件 | 更新日期: 2023-09-27 18:11:15
我用c#创建了一个边框为&父布局是另一个网格。当我尝试动态调整时,它没有给出预期的行为。我保持边界(带网格)的起始位置(左上角)不变&只拖动右下角的点来调整大小。在鼠标移动事件中,宽度&高度根据当前位置而改变。1)但是当改变宽度时,它总是改变起始点(左上角)身高吗?2)当边界被调整大小的子(网格)不改变其尺寸相应?我找不到任何伸展的方法。但是如果边界被移动,那么子网格也会随之移动。
Point offsetParent;
.....
private void MouseMoveEvent(object sender, MouseEventArgs e)
{
if (bIsMouseDown)
{
ResizeControl(e);
offsetParent = e.GetPosition(parentGrid); //reset offset to current
}
}
private void ResizeControl(MouseEventArgs e)
{
// get current point
Point CurPosParent = e.GetPosition(parentGrid);
// current & new position difference
Point diff = new Point(CurPosParent.X - offsetParent.X, CurPosParent.Y - offsetParent.Y);
// keep start point (left-top position) of border fixed
// adjust only width & height of border
border1.Width += diff.X; //changes start point (left-top position) ????
border1.Height += diff.Y;
}
从这个链接中发现了我的错误对象定位和布局
现在我使用Canvas作为父元素。宽度,边框高度&可以在不改变起始点的情况下改变网格。
Point offsetParent;
.....
private void MouseMoveEvent(object sender, MouseEventArgs e)
{
if (bIsMouseDown)
{
ResizeControl(e);
offsetParent = e.GetPosition(parentCanvas); //reset offset to current
}
}
private void ResizeControl(MouseEventArgs e)
{
// get current point
Point CurPosParent = e.GetPosition(parentCanvas);
// current & new position difference
Point diff = new Point(CurPosParent.X - offsetParent.X, CurPosParent.Y - offsetParent.Y);
// keep start point (left-top position) of border fixed
// adjust only width & height of border
border1.Width += diff.X;
border1.Height += diff.Y;
grid1.Width += diff.X;
grid1.Height += diff.Y;
}