我试图把一个动画在wpf上的一个编程文本块。
但我得到了一个System.InvalidOperationException。
好的,代码在由xaml组成的文本块中工作,所以我怀疑它是不是代码。
private void TypewriteTextblock(string textToAnimate, TextBlock txt, TimeSpan timeSpan)
{
Storyboard story = new Storyboard();
story.FillBehavior = FillBehavior.HoldEnd;
discreteStringKeyFrame = null;
StringAnimationUsingKeyFrames stringAnimationUsingKeyFrames = new StringAnimationUsingKeyFrames();
stringAnimationUsingKeyFrames.Duration = new Duration(timeSpan);
string tmp = string.Empty;
foreach (char c in textToAnimate)
{
discreteStringKeyFrame = new DiscreteStringKeyFrame();
discreteStringKeyFrame.KeyTime = KeyTime.Paced;
tmp += c;
discreteStringKeyFrame.Value = tmp;
stringAnimationUsingKeyFrames.KeyFrames.Add(discreteStringKeyFrame);
}
Storyboard.SetTargetName(stringAnimationUsingKeyFrames, txt.Name);
Storyboard.SetTargetProperty(stringAnimationUsingKeyFrames, new PropertyPath(TextBlock.TextProperty));
story.Children.Add(stringAnimationUsingKeyFrames);
story.Begin(txt); //Here i got the Exception
}下面是我创建Textblock的方法:
for (int i = 1; i <= juego.PreguntaActiva.NumeroRespuestas(); i++)
{
TextBlock tb = new TextBlock() { Name = "res" + i, FontSize = 24, Foreground = Brushes.White, Margin = new Thickness(10, 0, 0, 0), VerticalAlignment = VerticalAlignment.Center, Text = i + "-" };
tb.MouseLeftButtonDown += Tb_MouseLeftButtonDown;
Grid.SetRow(tb, i);
mainGrid.Children.Add(tb);
}以及如何调用该方法
private void Tb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var textblock = (TextBlock)sender;
var pos = int.Parse(textblock.Name.Substring(3, 1));
TypewriteTextblock(juego.PreguntaActiva.Respuestas[pos - 1].Contenido, textblock, TimeSpan.FromSeconds(0.5));
StopTimer();
}并由此生成XAML代码
<TextBlock x:Name="res1" MouseLeftButtonDown="Res1_MouseLeftButtonDown" Grid.Row="1" Foreground="White" Margin="10,0,0,0" FontSize="24" VerticalAlignment="Center"></TextBlock>发布于 2019-04-15 21:54:25
使用Storyboard.SetTarget方法而不是Storyboard.SetTargetName
Storyboard.SetTarget(stringAnimationUsingKeyFrames, txt); //<--
Storyboard.SetTargetProperty(stringAnimationUsingKeyFrames, new PropertyPath(TextBlock.TextProperty));
story.Children.Add(stringAnimationUsingKeyFrames);
story.Begin(txt);https://stackoverflow.com/questions/55690551
复制相似问题