[英]How do I start a Storyboard in a Data Template in a Content Control in a User Control from codebehind?
唷。
我是认真的。 我将拼写如下......
故事板有一个键“myStoryboard”。 它保存在一个带有键“myDataTemplate”的DataTemplate中。
此数据模板在ContentControl中使用,此标记名称为“myContentControl”:
<ContentControl Name="myContentControl"
ContentTemplate="{DynamicResource myDataTemplate}"/>
内容控件在我的UserControl中使用。 在UserControl代码隐藏中,我做了一个键盘手势,应该启动“myStoryBoard”,但我没有这样的运气。
private void StartSB(object sender, ExecutedRoutedEventArgs e)
{
Storyboard sb = (Storyboard) this.TryFindResource("myStoryboard");
sb.Begin(this);
}
sb在这里总是为空。 我怎样才能获得故事板?
更新:
所以玩TryFindResource()我已经设法进入myDataTemplate
private void StartSB(object sender, ExecutedRoutedEventArgs e)
{
object sb = this.myContentControl.TryFindResource("myDataTemplate");
}
在Locals查看器中,我可以看到sb是myDataTemplate。 我可以在树中看到sb.base.Resources.Keys,这是一个“myStoryboard”所在的资源数组。 哦,这么近!
UPDATE2:
这里有更多代码。 我现在意识到,用文字解释这可能太过分了。
<UserControl >
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources\myUCResources.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<ContentControl Name="myContentControl"
ContentTemplate="{DynamicResource myDataTemplate}"
Content="{Binding}" />
...
</UserControl>
现在这个用户控件的代码隐藏
namespace myclass
{
public partial class myUserControl: UserControl, System.ComponentModel.INotifyPropertyChanged
{
...
public myUserControl()
{
InitializeComponent();
<!--setup keybinding-->
}
public void KeyBindExecuted(object sender, ExecutedRoutedEventArgs e)
{
Object sb = this.myContentControl.TryFindResource("myDataTemplate");
//sb returns the DataTemplate
}
}
}
最后是包含UI内容和我最终想要触发的动画的资源字典。 (myUCResources.xaml)
<ResourceDictionary>
<DataTemplate x:Key="myDataTemplate" >
<Grid>
<!-- elements like buttons -->
</Grid>
<DataTemplate.Resources>
<Storyboard x:Key="myStoryBoard">
<DoubleAnimation>
<!-- animation stuff-->
</DoubleAnimation>
</Storyboard>
</DataTemplate.Resources>
<DataTemplate.Triggers>
<EventTrigger SourceName="aButton" RoutedEvent="Button.Click">
<BeginStoryboard Storyboard="{StaticResource myStoryBoard}" />
</EventTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ResourceDictionary>
更新3:
确定不同的方法。 我可以从代码隐藏中使用DataTemplate中的EventTrigger来启动动画吗?
啊哈哈!
所以我找到了解决这个问题的迂回方式。 我的第三次更新,我接受了发射事件的想法似乎更有成效。 所有都可以在这里找到。
http://www.codeproject.com/script/Forums/View.aspx?fid=1004114&msg=2827455
简而言之,我使用FindResource获取DataTemplate,然后使用DataTemplate中的按钮的FindName来正常触发动画。 然后我按下了那个按钮的按钮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.