Üzerinde dinamik olarak koddan nesne oluşturduğum bir WPF tuvalim var. Bu nesneler RenderTransform özelliği ayarlanarak dönüştürülür ve bir animasyonun bu dönüşümlerden biri uygulanması gerekir. Şu anda, herhangi bir dönüşümün animasyonunu yapamıyorum (istisna oluşmaz ve animasyon çalışacak gibi görünür - tamamlanmış etkinlik artırılır). Ayrıca, animasyon sistemi geriliyorsa, bazen Storyboard.Completed olayı asla yükseltilmez.WPF: WordTransform'u dönüştürmek Çevirme kodu
Karşılaştığım tüm örnekler, XAML'deki dönüşümleri canlandırıyor. MSDN documentation, bir dönüştürmenin x: Name özelliğinin, bu parametrenin animatabl olması için ayarlanması gerektiğini önerir, ancak bunu koddan ayarlamak için bir çalışma yolu bulamadım.
Herhangi bir fikrin var mı?
Burada sorun reproduces tam kod listesi verilmiştir:
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace AnimationCompletedTest {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
Canvas panel;
public MainWindow() {
InitializeComponent();
MouseDown += DoDynamicAnimation;
Content = panel = new Canvas();
}
void DoDynamicAnimation(object sender, MouseButtonEventArgs args) {
for (int i = 0; i < 12; ++i) {
var e = new Ellipse {
Width = 16,
Height = 16,
Fill = SystemColors.HighlightBrush
};
Canvas.SetLeft(e, Mouse.GetPosition(this).X);
Canvas.SetTop(e, Mouse.GetPosition(this).Y);
var tg = new TransformGroup();
var translation = new TranslateTransform(30, 0);
tg.Children.Add(translation);
tg.Children.Add(new RotateTransform(i * 30));
e.RenderTransform = tg;
panel.Children.Add(e);
var s = new Storyboard();
Storyboard.SetTarget(s, translation);
Storyboard.SetTargetProperty(s, new PropertyPath(TranslateTransform.XProperty));
s.Children.Add(
new DoubleAnimation(3, 100, new Duration(new TimeSpan(0, 0, 0, 1, 0))) {
EasingFunction = new PowerEase {EasingMode = EasingMode.EaseOut}
});
s.Completed +=
(sndr, evtArgs) => {
Debug.WriteLine("Animation {0} completed {1}", s.GetHashCode(), Stopwatch.GetTimestamp());
panel.Children.Remove(e);
};
Debug.WriteLine("Animation {0} started {1}", s.GetHashCode(), Stopwatch.GetTimestamp());
s.Begin();
}
}
[STAThread]
public static void Main() {
var app = new Application();
app.Run(new MainWindow());
}
}
}
iyi ve basit, bana yardım ettiniz. –