У меня есть ситуация, когда я хотел бы повернуть элемент управления в форме WPF в левом значке мыши. Я пытался адаптировать код, который я нашел в другом месте, но я просто не совсем туда попал.
Вот что у меня есть:
XAML:
<Image
Name="UpArrow"
Height="50"
Width="50"
RenderOptions.BitmapScalingMode="HighQuality"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,70,0,0">
<Image.Source>
<TransformedBitmap Source="C:\Some Source File.jpg" >
<TransformedBitmap.Transform>
<RotateTransform Angle="180"/>
</TransformedBitmap.Transform>
</TransformedBitmap>
</Image.Source>
</Image>
И в моем коде позади:
Private Sub UpArrow_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles UpArrow.MouseLeftButtonDown
Dim TransBitmap As TransformedBitmap = Me.UpArrow.Source
Dim Trans As RotateTransform = TransBitmap.Transform
Dim anim As New Animation.DoubleAnimation(0, New Duration(TimeSpan.FromSeconds(1)))
Trans.BeginAnimation(RotateTransform.AngleProperty, anim)
End Sub
Я продолжаю пробовать разные вещи, но ничего не работает. Я могу читать код С# просто отлично, поэтому, если вам удобно отвечать на это, подойдите к нему, мы просто используем VB здесь. Я также полностью согласен с тем, что делаю все это в XAML, но, похоже, я не могу заставить это работать.
Благодарю!
Я думаю, проблема в том, что объект, который вы пытаетесь оживить (преобразованное растровое изображение), не может быть анимирован:
TransformedBitmap реализует интерфейс ISupportInitialize для оптимизации инициализации нескольких свойств. Изменения свойств могут возникать только во время инициализации объекта. Вызовите BeginInit, чтобы сообщить, что инициализация началась, и EndInit, чтобы сигнализировать о завершении инициализации. После инициализации изменения свойств игнорируются.
Идентичный код работает, если вы нацеливаете RenderTransform на изображение:
<Image
Name="UpArrow"
Height="50"
Width="50"
MouseLeftButtonDown="UpArrow_MouseLeftButtonDown"
RenderOptions.BitmapScalingMode="HighQuality"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,70,0,0">
<Image.RenderTransform>
<RotateTransform Angle="180"/>
</Image.RenderTransform>
<Image.Source>
<TransformedBitmap Source="Images/1.png" />
</Image.Source>
</Image>
А также:
Private Sub UpArrow_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles UpArrow.MouseLeftButtonDown
Dim Trans As RotateTransform = Me.UpArrow.RenderTransform
Dim anim As New Animation.DoubleAnimation(0, New Duration(TimeSpan.FromSeconds(1)))
Trans.BeginAnimation(RotateTransform.AngleProperty, anim)
End Sub
RenderTransform
. Хорошо знать, почему он не работал сTransformedBitmap
. У меня все это реализовано в XAML сейчас. Приятный эффект. Спасибо за информацию.