我有DataTemplate
ItemsControl
这是正常的。 DataTrigger
中有DataTemplate
,其中包含BeginStoryboard
EnterAction
。我试图将故事板的Completed
事件连接到背后的代码中,特别是关于数据对象的方法,但我可以灵活处理 - 目前我只是想让它运行任何一块动画完成后的C#代码。
指定Completed
XAML属性的值不会编译,因为在模板中定义了属性,因此没有特定的方法可以连接到。所以我需要使用后面的代码来手动连接事件。
为此,我查看了使用Snoop的应用程序,试图找到逻辑或可视树中膨胀模板Storyboard
的最终位置。到目前为止,我只能看到为每个项目创建的ContentControl
,其ContentTemplate
集。每个Content
的{{1}}属性设置为其对应的数据对象。 ContentControl
属性包含ContentTemplate
集合,其中包含Triggers
,最终包含EnterActions
。我的问题是,所有项目是否为他们的Storyboard
属性共享一个模板实例,或者他们各自获得自己的副本?如果他们共享一个,那么膨胀的触发器和故事板在哪里创建?
我已经提取了我的XAML的相关部分:
ContentTemplate
答案 0 :(得分:1)
在这种情况下,我通常更喜欢在DataContext
正在申请的项目Storyboard
中加入一个bool,并称之为AnimationCompleted
现在将Storyboard
修改为
<Storyboard x:Key="ConnectToMe" Duration="0:0:2.5" FillBehavior="Stop">
<DoubleAnimation To="400" Duration="0:0:1.5" Storyboard.TargetName="IconHighlight1" Storyboard.TargetProperty="Height" FillBehavior="Stop" />
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="DataContext.AnimationCompleted" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame Value="False" KeyTime="0:0:0" />
</BooleanAnimationUsingKeyFrames>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="DataContext.AnimationCompleted" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:2.5" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
我们在动画的结束点将bool AnimationCompleted
切换为true。因此,在AnimationCompleted
的属性设置器中,检查传入的value
是否为True
并从那里触发相应的函数/方法