繁体   English   中英

如何从代码隐藏中在用户控件的内容控件中的数据模板中启动故事板?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM