Silverlight: изменение размера элемента управления (границы, сетки и т. Д.) При перетаскивании в C#

#c# #silverlight #resize #border #drag

#c# #silverlight #изменение размера #граница #перетаскивание

Вопрос:

Я создал (используя 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 amp; 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 amp; height of border
        border1.Width  = diff.X;  //changes start point (left-top position) ????
        border1.Height  = diff.Y;              
    }
  

Комментарии:

1. что нужно проверить…. Каковы свойства VerticalAlignment и HorizontalAlignment границы? Насколько я понимаю ваше описание, для них должно быть установлено значение Top и Left соответственно

2. Я обнаружил свою ошибку из этой ссылки. Расположение и расположение объекта Теперь я использую Холст в качестве родительского. Ширина и высота границы и сетки могут быть изменены без изменения начальной точки.

3. Если вы решили проблему — опубликуйте ее как ответ, а затем примите его. Это способ переполнения стека.

Ответ №1:

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

Теперь я использую холст в качестве родительского элемента. Ширина и высота границы и сетки могут быть изменены без изменения начальной точки.

 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 amp; 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 amp; height of border 
    border1.Width  = diff.X;  
    border1.Height  = diff.Y;   
    grid1.Width  = diff.X;  
    grid1.Height  = diff.Y;               
}