2014-08-29 37 views
1

我有一种情况,我想在鼠标左键按下事件时旋转WPF窗体上的控件。我试图修改我在其他地方找到的代码,但是我不太满意。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 

我不断尝试一些不同的东西,但似乎没有任何工作。我可以很好地阅读C#代码,因此,如果您可以很轻松地回复它,那就去做吧,我们只是在这里使用VB。我也完全可以在XAML中完成这一切,但我似乎也无法使其工作。

谢谢!

回答

1

我认为这个问题是刚才说的对象你要动画(transformed bitmap)不能动画:

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中实现了这一切。效果很好。感谢您的信息。 – MattB 2014-08-29 23:49:48