Проблема изменения размера элемента каркаса в коде при использовании Stretch.Uniform - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь закодировать функцию изменения размера изображения в WPF. Я делаю это с помощью украшателей и вычисляю новый размер изображения. Я пытался сделать это через Scale, но быстро ни к чему. Приведенный ниже код прекрасно работает, когда для изображения установлено значение Stretch.Fill, но не для Stretch.Uniform Видео с приведенной ниже проблемой:

https://youtu.be/l-mhNMWPXJc

Вы Вы заметите, что источник изменения размера (должен быть 0,0: верхний левый) перемещается при изменении размера Uniform изображения. Вот базовый код:

Private Sub SetupDesignItems()
    For i = 0 To 350 Step 50
        Dim im As New Image
        With im
            .Source = New BitmapImage(New Uri("C:\Users\stigz\Pictures\test.png"))
            .Width = 100
            .Height = 100
            .MinHeight = 20
            .MinWidth = 20
            .Stretch = Stretch.Uniform
        End With
        Dim di As New DesignItem
        With di
            .Position = New Windows.Point(10 + i, 10 + i)
            .ItemObject = im
        End With

        AddDesignItem(di)           
    Next    
End Sub

Public Sub AddDesignItem(di As DesignItem)

    Dim fe As FrameworkElement
    fe = di.ItemObject

    Dim group = New TransformGroup()
    fe.RenderTransform = group
    fe.RenderTransformOrigin = New Point(0.5, 0.5)
    Dim scale As ScaleTransform = New ScaleTransform(1, 1)
    Dim rotate As RotateTransform = New RotateTransform(di.Rotation)
    Dim trans As TranslateTransform = New TranslateTransform(di.Position.X, di.Position.Y)
    group.Children.Insert(0, scale)
    group.Children.Insert(1, rotate)
    group.Children.Insert(2, trans)

    Canvas.Children.Add(fe)

End Sub


Private Sub BottomRight_DragDelta(ByVal sender As Object, ByVal e As DragDeltaEventArgs)

        Dim oldWidth As Double = designItemObject.Width
        Dim oldHeight As Double = designItemObject.Height
        Dim newWidth As Double = Math.Max(designItemObject.Width + e.HorizontalChange, bottomRightCorner.DesiredSize.Width)
        Dim newHeight As Double = Math.Max(designItemObject.Height + e.VerticalChange, bottomRightCorner.DesiredSize.Height)

        fe.Width = newWidth  
        fe.Height = newHeight

End Sub

Я пробовал все виды, но не могу понять, что происходит. Я хочу, чтобы источник изменения размера оставался stati c (в данном случае, вверху слева).

Для бонусных баллов - скажите мне, как отрисовать изображение в середине рекламодателя изменения размера, а не в верхнем левом углу!

Надеюсь, вы, ребята, можете помочь - это сводит меня с ума.

...