wpf使用计时器动态更改图像源

时间:2013-08-23 13:10:18

标签: wpf vb.net image

在WPF中,我有2张图片,我需要创建一个闪烁效果(不使用不透明度)。 假设我有a.png和b.png,第一步显示a.png,0.5秒后会显示b.png,然后0.5秒后会显示a.png,并重复不停。

我已经通过论坛,但我仍然没有运气在vb中获得示例,请帮忙。

2 个答案:

答案 0 :(得分:4)

您可以在没有任何代码的情况下使用适当的动画:

<Window.Resources>
    <BitmapImage x:Key="Image1" UriSource="C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"/>
    <BitmapImage x:Key="Image2" UriSource="C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg"/>
</Window.Resources>
...
<Image x:Name="image" Source="{StaticResource Image1}">
    <Image.Triggers>
        <EventTrigger RoutedEvent="Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Source"
                                                   Duration="0:0:1"
                                                   RepeatBehavior="Forever">
                        <DiscreteObjectKeyFrame Value="{StaticResource Image2}" 
                                                KeyTime="0:0:0.5"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Image.Triggers>
</Image>

或许将Loaded事件替换为更符合您需求的事件。

如果你真的想在后面的代码中执行它,你可以创建一个DispatcherTimer,其Interval设置为半秒,并在计时器的Tick事件处理程序中交替设置图像的{{1 }属性到两个图像之一。

答案 1 :(得分:0)

我不适合vb.net,但在c#中你可以使用类似

的东西
public ImageSource GetImageSourceFromImage(Bitmap pngFile)
        {
            MemoryStream imageStream = new MemoryStream();
            pngFile.Save(imageStream, ImageFormat.Png);
            imageStream.Seek(0, SeekOrigin.Begin);
            return BitmapFrame.Create(imageStream);
        }

此功能为您提供了一个可以分配给图像对象的图像源。