Как остановить изменение размера дочерних элементов Grid в Grid.RenderTransform - PullRequest
0 голосов
/ 09 апреля 2019

Хорошо, у меня есть Grid с 4 дочерними Images, каждый из которых расположен во всех четырех углах Grid примерно так.Grid with Children

Цель двух нижних дочерних элементов Images - растянуть сетку.Поэтому, когда пользователь перетаскивает эти углы, Grid растягивается.

Моя проблема в том, что дети тоже растягиваются, чего я не хочу.

Stretched Grid

Есть ли какой-нибудь способ гарантировать, что размер детей не растянется с Grid?

Спасибо.

PS Я мог бы отсоединить Child Images от Grid, но это намного проще и элегантнее, так как позиции x / y остаются на краях Grid отлично, я простоесли возможно, убедитесь, что они не Scale с ним.

Создание сетки и добавление дочерних элементов

//ImageGrid
ImageControl.Height = 500;
ImageControl.Width = 500;
ImageControl.ManipulationMode = ManipulationModes.All;

canvas.Children.Add(ImageControl);

ImageControl.Children.Add(tickBtn);
ImageControl.Children.Add(delBtn);
ImageControl.Children.Add(skewBtn);
ImageControl.Children.Add(strBtn);

ImageManipulation.Image_Drag = new CompositeTransform();
ImageManipulation.Image_Drag.CenterX = imW / 2;
ImageManipulation.Image_Drag.CenterY = imH / 2;

ImageControl.RenderTransform = ImageManipulation.Image_Drag;
strBtn.ManipulationDelta += ImageManipulation.resBtn_Manip;
skewBtn.ManipulationDelta += MaskManipulation.skewBtn_Manip;
dragControl.ManipulationDelta += ImageManipulation.movBtn_Manip;

Класс манипулирования

public static CompositeTransform Image_Drag;

public static void resBtn_Manip(object sender, ManipulationDeltaRoutedEventArgs e) 
{

    Mask_Drag.ScaleX += e.Delta.Translation.X;
    Mask_Drag.ScaleY += e.Delta.Translation.X;
}

public static void movBtn_Manip(object sender, ManipulationDeltaRoutedEventArgs e) 
{
    Mask_Drag.TranslateX += e.Delta.Translation.X;
    Mask_Drag.TranslateY += e.Delta.Translation.Y;
}

public static void skewBtn_Manip(object sender, ManipulationDeltaRoutedEventArgs e) 
{

    Mask_Drag.ScaleX -= e.Delta.Translation.X;
    Mask_Drag.ScaleY += e.Delta.Translation.Y;

    if (Mask_Drag.ScaleX < 0.5)

    {
        Mask_Drag.ScaleX = 0.5;
    }

    if (Mask_Drag.ScaleY < 0.5) 

    {
        Mask_Drag.ScaleY = 0.5;
    }
}
...