将故事板绑定到从代码后面添加的元素

本文关键字:添加 元素 代码 故事 绑定 | 更新日期: 2023-09-27 18:06:14

嗨,我得到了这个故事板在WPF,这工作得很好,但我需要加载我的用户控件的代码落后。(其中一些需要一些时间来加载,所以我需要给用户关于加载进度的信息)

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

<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'.

将故事板绑定到从代码后面添加的元素

您可以使用故事板。目标属性而不是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)

希望有帮助!