【发布时间】:2018-08-24 12:14:40
【问题描述】:
所以,一个简单的问题,但我现在无法弄清楚。在我的 C# XAML UWP 应用程序中,我正在加载一系列照片。我想为每张新创建的照片制作淡入动画。照片对象在代码隐藏中创建如下。
//getting the photos into the scroller
foreach (StorageFile current_file in GlobalVars.glo_lst_image_files)
{
Image current_image = new Image();
BitmapImage current_bitmapimage = new BitmapImage();
await current_bitmapimage.SetSourceAsync(await current_file.OpenAsync(FileAccessMode.Read));
current_bitmapimage.DecodePixelWidth = image_width;
current_image.Source = current_bitmapimage;
current_image.Width = image_width;
current_image.Style = App.Current.Resources["ImagePhotoScroller"] as Style;
current_image.Loaded += new RoutedEventHandler(OnPhotoScrollerImageLoad);
stack_photoscroller.Children.Add(current_image);
}
这个想法是OnPhotoScrollerImageLoad 将在照片的Loaded 事件上开始一个淡入故事板。如何做到这一点是我遇到困难的地方。我已经尝试了一些方法。
我尝试如下在 C# 中创建整个动画。
private void OnPhotoScrollerImageLoad(object sender, RoutedEventArgs e)
{
var storyboard = new Storyboard();
var doubleAnimation = new DoubleAnimation();
doubleAnimation.Duration = TimeSpan.FromMilliseconds(1000);
doubleAnimation.EnableDependentAnimation = true;
doubleAnimation.From = 0;
doubleAnimation.To = 1;
Storyboard.SetTargetProperty(doubleAnimation, "Opacity");
Storyboard.SetTarget(doubleAnimation, sender);
storyboard.Children.Add(doubleAnimation);
storyboard.Begin();
}
我无法正确定位目标。使用sender 时会出错。在我以前的应用程序中,我只会为在 XAML 中命名的预先存在的对象设置动画。我不确定如何正确设置此参数。
我还尝试在 XAML 中制作动画,如下所示。
<Storyboard x:Name="PhotoScrollerImageLoadFade">
<DoubleAnimation x:Name="PhotoScrollerImageLoadFade_dblanim"
Storyboard.TargetProperty="Opacity"
From="0" To="1"
Duration="0:0:1"/>
</Storyboard>
然后在 C# 中设置目标
private void OnPhotoScrollerImageLoad(object sender, RoutedEventArgs e)
{
Storyboard.SetTarget(PhotoScrollerImageLoadFade_dblanim, sender);
PhotoScrollerImageLoadFade.Begin();
}
但同样,sender 不起作用。我应该如何做到这一点?
【问题讨论】:
-
哪个错误?您是否尝试过使用投射
(DependencyObject)sender? -
@Sinatr 我想我应该包括在内,它是“无法从 'object' 转换为 'Windows.UI.Xaml.DependencyObject'”。您的解决方案完美运行。我知道这会很简单。如果您编写了正确的解决方案,我可以将您的解决方案标记为正确。