控件(边框,网格等)在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;              
    }

控件(边框,网格等)在c#中拖动时调整大小

从这个链接中发现了我的错误对象定位和布局

现在我使用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;               
}