Silverlight: управление (граница, сетка и т. Д.) Изменяет размер при перетаскивании в C # - PullRequest
0 голосов
/ 15 октября 2011

Я создал (используя 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;              
    }

1 Ответ

1 голос
/ 17 октября 2011

Обнаружил мою ошибку по этой ссылке Расположение и расположение объектов

Теперь я использую 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;               
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...