我在XAML中定义了动画
<Storyboard x:Key="slide">
<DoubleAnimation Duration="00:00:30"
From="{Binding Width,
ElementName=canvas}"
RepeatBehavior="Forever"
Storyboard.TargetName="transferCurreny"
Storyboard.TargetProperty="X"
To="{Binding ActualWidth,
ElementName=txtKron,
Converter={StaticResource MultiplyConverter},
ConverterParameter='-1'}" />
</Storyboard>
由以下方式触发:
<StackPanel.Triggers>
<EventTrigger RoutedEvent="StackPanel.Loaded">
<BeginStoryboard Storyboard="{StaticResource slide}" />
</EventTrigger>
<EventTrigger RoutedEvent="StackPanel.SizeChanged">
<BeginStoryboard Storyboard="{StaticResource slide}" />
</EventTrigger>
</StackPanel.Triggers>
当一些文本的长度低于15时,我想停止动画。我在文本的setter后面的代码中执行:
Storyboard animation = (Storyboard)stack.Resources["slide"];
if(value.Length > 15)
{
animation.Begin();
}
else
{
animation.Stop();
}
但它不起作用,任何想法?
答案 0 :(得分:0)
“isControllable”是否设为true?此故事板属性阻止例如如果设置为false(这是默认设置),则停止
编辑:可以通过代码
进行设置animation.Begin(this.MyContainer, true);
第二个参数设置isControllable
答案 1 :(得分:0)
要允许故事板从代码隐藏中停止,它也应该在代码隐藏(使用Begin()
)时启动,而不是像现在那样由XAML中的事件触发。
尝试将Loaded
和SizeChanged
事件分配给调用Begin
方法的代码隐藏事件(使用容器作为第一个参数,以及第二个参数true
),然后尝试Stop
,而不是使用EventTriggers
和BeginStoryboard
。
有关MSDN的更多信息:
要使故事板可控,请使用Begin方法并将true指定为第二个参数。
由于您使用EventTriggers
和BeginStoryboard
启动它,Storyboard.Stop
将无法执行任何操作
更新:我尚未对此进行测试,但this article上的MSDN表示您向Name
提供了BeginStoryboard
,您可以对其进行控制所以你也可以尝试一下。我怀疑它会“按原样”工作,我的猜测是你需要到达BeginStoryboard
对象,而不是Storyboard
对象,但这只是一个猜测,而且很简单修改值得一试