Я использую эту раскадровку XAML для реализации перехода между двумя изображениями с именами ctlIMage и altImage, которые определены следующим образом:
<Image x:Name = "ctlImage" Grid.Column ="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="4" VerticalAlignment= "Stretch" HorizontalAlignment = "Stretch" Stretch = "Uniform" Opacity="0">
<Image.RenderTransform>
<CompositeTransform x:Name="image_Transform" ></CompositeTransform >
</Image.RenderTransform >
</Image>
<Image x:Name = "altImage" Grid.Column ="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="4" VerticalAlignment= "Stretch" HorizontalAlignment = "Stretch" Stretch = "Uniform" Opacity="0">
<Image.RenderTransform>
<CompositeTransform x:Name="altImage_Transform" ></CompositeTransform >
</Image.RenderTransform >
</Image>
<Storyboard x:Name="ctlImageFadeOut" Completed="SwapAltCtl">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ctlImage">
<EasingDoubleKeyFrame KeyTime="0" Value="1.0" />
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="0" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="ScaleX" Storyboard.TargetName="image_Transform">
<EasingDoubleKeyFrame KeyTime="0" Value="1.0" />
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.5" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="ScaleY" Storyboard.TargetName="image_Transform">
<EasingDoubleKeyFrame KeyTime="0" Value="1.0" />
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.5" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="altImage">
<EasingDoubleKeyFrame KeyTime="0" Value="0" />
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="1.0" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
Когда я играю анимацию, используя этот код:
altImage.Opacity = 0;
altImage.Visibility = Visibility.Visible;
altImage.Source = await MainPlayList.GetCurrentImage((int)altImage.Height, (int)altImage.Width);
ctlImageFadeOut.Begin();
И используйте этот метод, чтобы поменять местами оба изображения в конце анимации:
private async void SwapAltCtl(object sender, object e)
{
ctlImage.Opacity = 0;
image_Transform.ScaleX = 1;
image_Transform.ScaleY = 1;
ctlImage.Height = altImage.ActualHeight;
ctlImage.Width = altImage.ActualWidth;
ctlImage.Source = await MainPlayList.GetCurrentImage((int)ctlImage.Height, (int)ctlImage.Width);
ctlImage.Opacity = 1;
altImage.Opacity = 0;
altImage.Visibility = Visibility.Collapsed;
}
Я получаю ctlImage половинного размера, например ScaleX и ScaleY не сбрасываются после раскадровки XAML. Как вы видите, я даже пытался сбросить высоты и ширины до известных значений (альтернативное изображение, которое уже отображается).
Как мы можем сбросить изображение после анимации?
Спасибо!