2015-12-11 2 views
2

У меня есть автономные файлы XAML, которые динамически загружаются в MainWindow. Файлы XAML содержат анимацию (ы). Загружать XAML просто, но как правильно заставить анимацию работать после загрузки XAML. Это мой тестовый код, который работает правильно, если он вставлен в обычное окно WPF, но если он динамически загружен, анимация не запускается. Я подозреваю проблему со ссылкой на TargetName и TargetProperty.WPF - Анимация в динамически загружаемом XAML

XAML:

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Page1" Width="1080" Height="1920"> 


    <Grid x:Name="GridWrapper"> 
     <Viewbox x:Name="ViewboxWrapper"> 
      <Grid x:Name="GridMain" Width="1080" Height="1920" Background="Black"> 
       <Grid.Resources> 
        <Storyboard x:Key="StoryboardPhotos" Duration="0:0:5"> 
         <DoubleAnimation Storyboard.TargetName="LabelPhoto_01" Storyboard.TargetProperty="Opacity" BeginTime="0:0:0" Duration="0:0:5" To="1.0"></DoubleAnimation> 
        </Storyboard> 
       </Grid.Resources> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="100*"></RowDefinition> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="100*"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <Label x:Name="LabelPhoto_01" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource StyleLabelPhoto}" Opacity="0"> 
        <Image x:Name="ImagePhoto_01" Source="../../../Content/FPO/1.jpg"></Image> 
       </Label> 
      </Grid> 
     </Viewbox> 
    </Grid> 
</Window> 

C# код:

private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) 
     { 
      Window window = null; 
      using (FileStream fs = new FileStream("Templates/16x9/Portrait/1.xaml", FileMode.Open, FileAccess.Read)) //load xaml file 
      { 
       window = (Window)XamlReader.Load(fs); 
      } 

      Viewbox wrapper = (Viewbox)window.FindName("ViewboxWrapper"); 
      Grid mainGrid = wrapper.FindName("GridMain") as Grid; 
      var sb = (Storyboard)mainGrid.FindResource("StoryboardPhotos"); 

      //disconnect grid from the parent window 
      ((Grid)wrapper.Parent).Children.Remove(wrapper); 

      // attach the grid to the main window 
      GridParent.Children.Add(wrapper); 
      sb.Begin(); 
     } 
+0

Plz проверить и подтвердить ответ. – AnjumSKhan

ответ

1

Вставьте ниже код после GridParent.Children.Add(wrapper);

sb.Begin(window); 
window.Close(); 

В противном случае вы получите сообщение об ошибке NameScope.