C#:
public partial class MainWindow : Window
{
Storyboard a = new Storyboard();
int i;
public MainWindow()
{
InitializeComponent();
a.Completed += new EventHandler(a_Completed);
a.Duration = TimeSpan.FromMilliseconds(10);
a.Begin();
}
void a_Completed(object sender, EventArgs e)
{
textblock.Text = (++i).ToString();
a.Begin();
}
}
XAML:
<Window x:Class = "Gui.MainWindow" x:Name = "control"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "300" Width = "300">
<Canvas>
<TextBlock Name = "textblock"></TextBlock>
</Canvas>
Что не так с этим кодом? раскадровка останавливается после 20-50 раундов. Каждый раз другой номер





Я считаю, что это потому, что с вашим кодом не создается связи между анимационными часами раскадровки и TextBlock Text DependencyProperty. Если бы мне пришлось угадывать, я бы сказал, что когда раскадровка вылетает, это было в несколько случайное время из-за загрязнения конвейера обновления DependencyProperty (TextBlock.Text - это DependencyProperty). Создание такой ассоциации, как показано ниже (подойдет либо RunTimeline, либо RunStoryboard, но покажите альтернативные методы рассмотрения этого):
public partial class Window1 : Window
{
Storyboard a = new Storyboard();
StringAnimationUsingKeyFrames timeline = new StringAnimationUsingKeyFrames();
DiscreteStringKeyFrame keyframe = new DiscreteStringKeyFrame();
int i;
public Window1()
{
InitializeComponent();
//RunTimeline();
RunStoryboard();
}
private void RunTimeline()
{
timeline.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(TextBlock.Text)"));
timeline.Completed += timeline_Completed;
timeline.Duration = new Duration(TimeSpan.FromMilliseconds(10));
textblock.BeginAnimation(TextBlock.TextProperty, timeline);
}
private void RunStoryboard()
{
timeline.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(TextBlock.Text)"));
a.Children.Add(timeline);
a.Completed += a_Completed;
a.Duration = new Duration(TimeSpan.FromMilliseconds(10));
a.Begin(textblock);
}
void timeline_Completed(object sender, EventArgs e)
{
textblock.Text = (++i).ToString();
textblock.BeginAnimation(TextBlock.TextProperty, timeline);
}
void a_Completed(object sender, EventArgs e)
{
textblock.Text = (++i).ToString();
a.Begin(textblock);
}
}
Это работает для меня до тех пор, пока я позволяю ему работать (примерно в 10 раз дольше, чем когда-либо требовалось, чтобы он отключился).
Тим
Очень интересная проблема, я обнаружил, что это останавливается, когда моя мышь перемещается по TextBlock, я иногда получаю 1500.