Проблема с вращением изображения из кода в WPF

1

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

Благодарю!

Теги:
xaml
wpf

1 ответ

1
Лучший ответ

Я думаю, проблема в том, что объект, который вы пытаетесь оживить (преобразованное растровое изображение), не может быть анимирован:

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
  • 1
    Я только собирался опубликовать, что я понял это, или, точнее, понял, что это будет работать с использованием RenderTransform . Хорошо знать, почему он не работал с TransformedBitmap . У меня все это реализовано в XAML сейчас. Приятный эффект. Спасибо за информацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню