Я пытаюсь закодировать функцию изменения размера изображения в 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 (в данном случае, вверху слева).
Для бонусных баллов - скажите мне, как отрисовать изображение в середине рекламодателя изменения размера, а не в верхнем левом углу!
Надеюсь, вы, ребята, можете помочь - это сводит меня с ума.