2013-04-03 4 views
9

Я изучаю wpf и в то же время разрабатываю приложение с ним. Мне сложно определить, как я могу что-то запускать, когда делается двойная (или другие). Например:Запустить действие при завершении анимации C# wpf

DoubleAnimation myanim = new DoubleAnimation(); 
myanim.From = 10; 
myanim.To = 100; 
myanim.Duration = new Duration(TimeSpan.FromSeconds(3)); 
myview.BeginAnimation(Button.OpacityPropert, myanim); 

//Code to do something when animation ends 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Windows.Media.Animation; 

namespace app 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     DoubleAnimation widthbutton = new DoubleAnimation(); 
     widthbutton.From = 55; 
     widthbutton.To = 100; 
     widthbutton.Duration = new Duration(TimeSpan.FromSeconds(1.5)); 
     button1.BeginAnimation(Button.HeightProperty, widthbutton); 

     DoubleAnimation widthbutton1 = new DoubleAnimation(); 
     widthbutton1.From = 155; 
     widthbutton1.To = 200; 
     widthbutton1.Duration = new Duration(TimeSpan.FromSeconds(1.5)); 
     button1.BeginAnimation(Button.WidthProperty, widthbutton1); 

     widthbutton.Completed += new EventHandler(myanim_Completed); 
    } 
    private void myanim_Completed(object sender, EventArgs e) 
    { 
     //your completed action here 
     MessageBox.Show("Animation done!"); 
    } 
} 
} 

Как это достигается? Я прочитал несколько других сообщений об этом, но все они объясняют это с помощью xaml, однако я бы хотел сделать это с помощью кода C#. Благодаря!

ответ

23

Вы можете подключить обработчик событий к событию Completed DoubleAnimation.

myanim.Completed += new EventHandler(myanim_Completed); 

private void myanim_Completed(object sender, EventArgs e) 
{ 
    //your completed action here 
} 

Или, если вы предпочитаете рядный, вы можете сделать

myanim.Completed += (s,e) => 
    { 
     //your completed action here 
    }; 

Не забудьте прикрепить обработчик перед запуском анимации в противном случае он не будет срабатывать.

+0

Это не показывает ошибок в коде, но когда анимация заканчивается, ничего не происходит, см. Мое редактирование для моего полного нового кода. – user1446632

+3

. Перед запуском аниматора вы начинаете анимацию. Перед вызовом 'BeginAnimation' вам нужно прикрепить обработчик. – keyboardP

+0

aaah, niceeee. Спасибо! Прекрасно работает! – user1446632

Смежные вопросы