WPF textblock动画效果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF textblock动画效果相关的知识,希望对你有一定的参考价值。
如何使TEXTBLOCK以一定的速度向右平行滑动,最好有代码,没有代码思路也行。
以下的代码是我之前用的,不行,会堵塞UI线程。
while (textblock.Margin.Left!=0)
textblock.Margin = new Thickness(textblock.Margin.Left-1, textblock.Margin.Top, textblock.Margin.Right, textblock.Margin.Bottom);
dhtext.Margin = new Thickness(dhtext.Margin.Left, dhtext.Margin.Top, textblock.Margin.Left, dhtext.Margin.Bottom);
System.Threading.Thread.Sleep(10);
基本上将TextBlock放置到一个Canvas中,为TextBlock定义Animation。
<DoubleAnimation
Storyboard.TargetName="MyText"
Storyboard.TargetProperty="(Canvas.Left)"
From="0" To="100" Duration="0:0:1" />
上边表示,TextBlock用1s中从右移动100个像素。
网上示例很多,你可以参考一下。追问
那我如何用后台代码控制Animation,比如说单击按钮后textblock用1S移动100像素,然后移动完了再瞬间移动回来。
干脆你帮我创建一个方法,方法参数是移动时间和控件要移动到的位置,返回类型是void,控件名是TEXTBLOCK1
Animation定义在StoryBoard中,StoryBoard有函数启动Begin()和终止Stop()动画。
这种稍微复杂一点,定义动画帧,每一个时间点不同的值。
基于这种思路自己多尝试,网上这方面的例子也都是很成熟的,建议你多去看看。
如何在wpf中动态选择TextBlock动画类型?
我想创建简单的动画,其类型基于某些值。我需要在TextBlock控件中更改文本的颜色,但是目标颜色取决于有界变量。我已经创建了2个DataTriggers,并且根据我的有界变量的值,应该开始播放适当的动画。开始时,一切似乎都正常工作(AnimationValue在开始时等于0),当值更改为1时,动画运行,然后值返回为0。问题是,当值变为2时(动画也带有另一种颜色)运行),然后再次为0,则第一个动画将不再运行,但第二个动画仍然可以正常运行。
<Border
Grid.Column="0"
Background="Transparent">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="32"
Foreground="White"
Text="MyText">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="Binding Path=AnimationValue" Value="1">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="Gray"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="White"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="Binding Path=AnimationValue" Value="2">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="Firebrick"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="White"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
设置正确的值没有问题-我已经使用调试器对其进行了检查,并且每次都设置了正确的值。 0始终介于1和2之间。DataContext也不是问题-View和ViewModel之间的连接没有断开。我注意到破碎的动画始终是xaml文件中的第一个动画。现在,“灰色”动画将停止正常工作,但是如果我更改xaml文件中的顺序,耐火砖动画将是残破的动画。感谢您的帮助。
似乎在触发器中运行StoryBoard
很奇怪。对于它们的行为,我没有技术上的解释,但是在SO question中,我为您找到了答案。
以下是基于上述答案的一些有效的代码:
<Style>
<Style.Triggers>
<DataTrigger Binding="Binding Path=AnimationValue" Value="0">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="Animation1" />
<StopStoryboard BeginStoryboardName="Animation2" />
<BeginStoryboard x:Name="Animation0">
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="White"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="Binding Path=AnimationValue" Value="1">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="Animation0" />
<StopStoryboard BeginStoryboardName="Animation2" />
<BeginStoryboard x:Name="Animation1">
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="Gray"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="Binding Path=AnimationValue" Value="2">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="Animation0" />
<StopStoryboard BeginStoryboardName="Animation1" />
<BeginStoryboard x:Name="Animation2">
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="Foreground.Color"
To="Firebrick"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
以上是关于WPF textblock动画效果的主要内容,如果未能解决你的问题,请参考以下文章