我有带有图像控件和绑定源的列表框。
我想要什么:加载图像时(我认为它是 ImageOpened 事件?),将 opacity 属性设置为 0 到 100。一些应用程序,如 Facebook,使用此效果。
图像控件位于 DataTemplate 内部,并且有很多列表框项。
怎么解决?
PS 我试图为 Image 控件创建触发器,该触发器在 ImageOpened 事件之后更改不透明度属性,但应用程序在调试器中没有任何显示原因而崩溃。
我有带有图像控件和绑定源的列表框。
我想要什么:加载图像时(我认为它是 ImageOpened 事件?),将 opacity 属性设置为 0 到 100。一些应用程序,如 Facebook,使用此效果。
图像控件位于 DataTemplate 内部,并且有很多列表框项。
怎么解决?
PS 我试图为 Image 控件创建触发器,该触发器在 ImageOpened 事件之后更改不透明度属性,但应用程序在调试器中没有任何显示原因而崩溃。
数据模板:
<DataTemplate>
<Image Source="{Binding}" Opacity="0" ImageOpened="image_ImageOpened"/>
</DataTemplate>
图像动画:
<phone:PhoneApplicationPage.Resources>
<Storyboard x:Name="Storyboard1">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</phone:PhoneApplicationPage.Resources>
ImageOpened 处理程序:
private void image_ImageOpened(object sender, System.Windows.RoutedEventArgs e)
{
Storyboard1.Begin();
}
您最初可以将 ImageOpacity
设置为零,然后附加一个ImageOpened
将动画设置Opacity
为 1 的处理程序。
<DataTemplate>
<Image Source="{Binding}" Opacity="0" ImageOpened="OnImageOpened"/>
</DataTemplate>
ImageOpened
处理程序:
private void OnImageOpened(object sender, RoutedEventArgs e)
{
var opacityAnimation = new DoubleAnimation
{
To = 1,
Duration = TimeSpan.FromSeconds(1)
};
Storyboard.SetTarget(opacityAnimation, (DependencyObject)sender);
Storyboard.SetTargetProperty(opacityAnimation,
new PropertyPath(Image.OpacityProperty));
var storyboard = new Storyboard();
storyboard.Children.Add(opacityAnimation);
storyboard.Begin();
}