Привязка раскадровки к элементу, добавленному из кода позади - PullRequest
0 голосов
/ 20 августа 2011

Привет, я получил эту раскадровку в 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>

Это работает, но, как я уже говорил, мне нужно изменить его для запуска из Code Behind. Думал о чем-то вроде этого, но я не могу заставить Привязку работать.

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

Броски и ошибка

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

1 Ответ

2 голосов
/ 20 августа 2011

Вы можете использовать свойство Storyboard.Target вместо Storyboard.TargetName. Сначала удалите свойство TargetName вашего XAML и добавьте имя к анимации, чтобы вы могли ссылаться на него в коде:

<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)

Надеюсь, это поможет!

...