2015-03-24 3 views
0

Мне нужно повернуть изображение в приложении wpf. В основном это изображение - это колесо, и его нужно поворачивать после события нажатия кнопки. В моей XAML я определил этот образ следующим образом: -Как контролировать скорость вращения изображения в wpf с помощью C#

<Ellipse Name="wheel" Canvas.Left="244.813" Canvas.Top="39" Height="525" Width="525" RenderTransformOrigin="0.5,0.5"> 
     <Ellipse.Fill> 
      <ImageBrush x:Name="imgwheel" Stretch="Uniform" /> 
     </Ellipse.Fill> 
     <Ellipse.RenderTransform> 
      <RotateTransform x:Name="rtWheel" CenterX="0" CenterY="0" /> 
     </Ellipse.RenderTransform> 
</Ellipse> 

Это изображение можно вращать с помощью RotateTransform rotateTransform = new RotateTransform(angle);, где angle представляет собой переменную, которая определяет угол поворота. Моя проблема состоит в том, чтобы создать колесо анимации, которое должно вращаться в течение 10 секунд с постоянной скоростью, и оно должно остановиться при описанном угле. Как реализовать его с помощью C#?

+1

Вы знаете об анимации в WPF? Посмотрите https://msdn.microsoft.com/de-de/library/ms752312%28v=vs.110%29.aspx#storyboardwalkthrough, если нет. С помощью анимации вы можете изменить значение (угол поворота) от x до y за определенное время. И вы также можете сделать это в некоторых фантастических нелинейных режимах (подпрыгивая и т. Д.) –

ответ

0

XAML

Это его вращать (положить его в теги эллипса):

<Ellipse.Triggers> 
     <EventTrigger RoutedEvent="Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:10"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Ellipse.Triggers> 

В основном устанавливает анимацию вращения, исходящую от e llipse загружается

C#

 Storyboard storyboard = new Storyboard(); 
     storyboard.Duration = new Duration(TimeSpan.FromSeconds(10)); 
     DoubleAnimation rotateAnimation = new DoubleAnimation() 
     { 
      From = 0, 
      To = 360, 
      Duration = storyboard.Duration, 
      RepeatBehavior= new RepeatBehavior(1) 
     }; 

     Storyboard.SetTarget(rotateAnimation, ellipseToRotate); 
     Storyboard.SetTargetProperty(rotateAnimation, new PropertyPath("(Ellipse.RenderTransform).(RotateTransform.Angle)")); 

     storyboard.Children.Add(rotateAnimation); 

     storyboard.Begin(); 

где 'ellipseToRotate' является эллипсом вы хотите повернуть

+0

Спасибо. Это связано с моей потребностью. Но как я могу вызвать это вращение с помощью моего кода на C#? –

+0

@MohitGupta добавлено – RedLaser

+0

Спасибо, сэр. Это работает. –

1

Ваш вопрос немного запутан, потому что название требует контроля скорости, тогда как текст вопроса относится к постоянной скорости. В любом случае, используя анимацию, вы можете управлять стартовой позицией и конечным положением угла независимо от того, какое значение вам подходит, и указать время, которое оно должно принять.

Ниже примере анимации я сам использую, когда я должен загрузить то, что занимает больше, чем 1s:

<DataTemplate x:Key="RowLoadingTemplate"> 
     <Image x:Name="Image" Source="/Interstone.Bestelbonnen;component/Images\loading.png" Visibility="Hidden" RenderTransformOrigin="0.5,0.5"> 
      <Image.RenderTransform> 
       <RotateTransform x:Name="Rotator" Angle="0"/> 
      </Image.RenderTransform> 
     </Image> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding IsLoading}" Value="True"> 
       <DataTrigger.Setters> 
        <Setter TargetName="Image" Property="Visibility" Value="Visible"/> 
       </DataTrigger.Setters> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="Rotator" Storyboard.TargetProperty="Angle" To="360" Duration="0:0:1" 
              /> 
         </Storyboard> 
        </BeginStoryboard>  
       </DataTrigger.EnterActions> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
Смежные вопросы