Масштабирование wpf с помощью ScaleTransofrm не работает нормально

При попытке увеличить Scale(X/Y) на любую величину контент просто пропадает, а при рисовании вообще творится чертовщина какая то. Пробовал во все контейнеры компоновки вставлять этот Transform - такая же фигня, просто контент(всякие кнопки, элементы, нарисованные вещи) пропадает навечно. Но при этом если статично в xaml разметке все ставить, то работает. Xaml:

    <Grid>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <StackPanel Grid.Column="0" VerticalAlignment="Center">
                <RadioButton Content="Линия" 
                         Margin="4" 
                         x:Name="radioButtonLine" 
                         IsChecked="True" />
                <RadioButton Content="Эллипс" 
                         Margin="4" 
                         x:Name="radioButtonEllipse" />
                <RadioButton Content="Квадарат" 
                         Margin="4" 
                         x:Name="radioButtonRectangle"/>
                <Button Content="Next" Command="{Binding Select}"></Button>
            </StackPanel>
            <Canvas Grid.Column="1"
                Background="Black"
                MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
                MouseMove="Canvas_MouseMove"
                MouseLeftButtonUp="canvas_MouseLeftButtonUp"
                Name="canvas"  
                MouseWheel="Canvas_Transform">
                <Canvas.RenderTransform>
                    <ScaleTransform x:Name="scale"/>
                </Canvas.RenderTransform>
            </Canvas>
        </Grid>
    </Grid>

С#:

private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            arg = e;
            point = e.GetPosition(canvas);
            if (radioButtonLine.IsChecked == true)
            {
                line = new Line();
                line.Stroke = Brushes.White;
                line.X1 = line.X2 = point.X;
                line.Y1 = line.Y2 = point.Y;
                canvas.Children.Add(line);
            }
            if (radioButtonEllipse.IsChecked == true)
            {
                ellipse = new Ellipse();
                ellipse.Stroke = Brushes.White;
                ellipse.SetValue(Canvas.TopProperty, point.Y);
                ellipse.SetValue(Canvas.LeftProperty, point.X);
                canvas.Children.Add(ellipse);
            }
            if (radioButtonRectangle.IsChecked == true)
            {
                rect = new Rectangle();
                rect.Stroke = Brushes.White;
                rect.SetValue(Canvas.LeftProperty, point.X);
                rect.SetValue(Canvas.TopProperty, point.Y);
                canvas.Children.Add(rect);
            }
            IsDrawing = true;
        }

        private void Canvas_MouseMove(object sender, MouseEventArgs e)
        {
            if (IsDrawing)
            {
                App.paintViewModel.SavedContent = Content;
                Point pointEnd = e.GetPosition(canvas);
                if (radioButtonLine.IsChecked == true)
                {
                    line.X2 = pointEnd.X;
                    line.Y2 = pointEnd.Y;
                    IsDrawing = false;
                    Canvas_MouseLeftButtonDown(sender, arg);
                }
                if (radioButtonEllipse.IsChecked == true)
                {
                    if (point.X > pointEnd.X)
                        ellipse.SetValue(Canvas.LeftProperty, pointEnd.X);
                    else
                        ellipse.SetValue(Canvas.LeftProperty, point.X);
                    if (point.Y > pointEnd.Y)
                        ellipse.SetValue(Canvas.TopProperty, pointEnd.Y);
                    else
                        ellipse.SetValue(Canvas.TopProperty, point.Y);
                    ellipse.Width = Math.Abs(pointEnd.X - point.X);
                    ellipse.Height = Math.Abs(point.Y - pointEnd.Y);
                }
                if (radioButtonRectangle.IsChecked == true)
                {
                    if (point.X > pointEnd.X)
                        rect.SetValue(Canvas.LeftProperty, pointEnd.X);
                    else
                        rect.SetValue(Canvas.LeftProperty, point.X);
                    if (point.Y > pointEnd.Y)
                        rect.SetValue(Canvas.TopProperty, pointEnd.Y);
                    else
                        rect.SetValue(Canvas.TopProperty, point.Y);
                    rect.Width = Math.Abs(pointEnd.X - point.X);
                    rect.Height = Math.Abs(point.Y - pointEnd.Y);
                }
            }
        }

        private void canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            IsDrawing = false;
        }

        private void Canvas_Transform(object sender, MouseWheelEventArgs e)
        {
            Point center = e.GetPosition(this);
            this.scale.CenterX = center.X;
            this.scale.ScaleY = center.Y;
            if (e.Delta < 0)
            {
                this.scale.ScaleX -= 0.001;
                this.scale.ScaleY -= 0.001;
            }
            else 
            {
                this.scale.ScaleX += 0.001;
                this.scale.ScaleY += 0.001;
            }
        }

Нормальная линия, Попытка нарисовать линию после масштабирования


Ответы (0 шт):