2011-08-19 84 views
0

嗨,我在WPF中获得这个故事板,这很好,但我需要加载我的用户控件Code Behind。 (其中一些需要一些时间来加载,所以我需要给用户有关加载进度的信息)绑定故事板到元素添加从代码隐藏

无论如何,这是我的代码现在。

<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" 
    Storyboard.TargetName="businessCard" 
     Storyboard.TargetProperty="(UIElement.Visibility)"> 
      <DiscreteObjectKeyFrame KeyTime="00:00:0.01"> 
      <DiscreteObjectKeyFrame.Value> 
       <Visibility>Visible</Visibility> 
      </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 
</ObjectAnimationUsingKeyFrames> 

我将它们添加到我的代码以

<Grid Name="MyGrid"> 
    <local:BusinessCard x:Name="businessCard"/> 
    <local:MailMessage x:Name="mailMessageCard" 
    DataContext="{Binding Path=SelectedItem, ElementName=foldersTreeView}" /> 
</Grid> 

这工作,但正如我所说,我需要改变它从后面的代码运行。 正在考虑这样的事情,但我无法让绑定工作。

var businessCard = new BusinessCard() {Name = "businessCard"}; 
MyGrid.Children.Add(businessCard); 

抛出和错误

'businessCard' name cannot be found in the name scope of 'System.Windows.Controls.Grid'. 

回答

2

可以使用Storyboard.Target属性而不是Storyboard.TargetName。 首先删除您的XAML的targetName属性,名称添加到您的动画,所以你可以参考它在后台代码:

<ObjectAnimationUsingKeyFrames x:Name="MyObjectAnimation" BeginTime="00:00:00" 
    Storyboard.TargetProperty="(UIElement.Visibility)"> 
     <DiscreteObjectKeyFrame KeyTime="00:00:0.01"> 
     <DiscreteObjectKeyFrame.Value> 
      <Visibility>Visible</Visibility> 
     </DiscreteObjectKeyFrame.Value> 
     </DiscreteObjectKeyFrame> 
</ObjectAnimationUsingKeyFrames> 

然后在你的后台代码,创建对象后,更新动画:

var businessCard = new BusinessCard() {Name = "businessCard"}; 
MyGrid.Children.Add(businessCard); 
MyObjectAnimation.SetValue(Storyboard.TargetProperty, businessCard) 

希望它有帮助!