您好我在WPF中获得了这个Storyboard,效果很好,但我需要为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>
这是Works,但正如我所提到的,我需要将其更改为从Code Behind运行。 正在考虑这样的事情,但我无法让Binding工作。
var businessCard = new BusinessCard() {Name = "businessCard"};
MyGrid.Children.Add(businessCard);
投掷和错误
'businessCard' name cannot be found in the name scope of 'System.Windows.Controls.Grid'.
答案 0 :(得分: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)
希望它有所帮助!