1

我有带有图像控件和绑定源的列表框。

我想要什么:加载图像时(我认为它是 ImageOpened 事件?),将 opacity 属性设置为 0 到 100。一些应用程序,如 Facebook,使用此效果。

图像控件位于 DataTemplate 内部,并且有很多列表框项。

怎么解决?

PS 我试图为 Image 控件创建触发器,该触发器在 ImageOpened 事件之后更改不透明度属性,但应用程序在调试器中没有任何显示原因而崩溃。

4

2 回答 2

2

数据模板:

<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();
 }
于 2013-08-26T17:20:57.110 回答
1

您最初可以将 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();
}
于 2013-08-26T15:22:49.243 回答