#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;
}