【问题标题】:C# XAML Metro Image dynamic SourceC# XAML Metro Image 动态源
【发布时间】:2012-10-17 09:01:26
【问题描述】:

我喜欢使用 XAML 中的一个 Image 控件制作简单的动画,并以 1 秒的间隔将 Image 的源交换到另一个。

但是当我这样做时,图像会闪烁。我使用此代码(在TimerTick 事件处理程序处):

Uri uri = new Uri("ms-appx:/Sprites/Running/" + y++ + ".png", 
              UriKind.RelativeOrAbsolute);
BitmapImage textureBitmap = new BitmapImage(uri);

this.ImageHolder.Source = textureBitmap;

问题可能出在哪里?我应该缓存 BitmapImages 吗?

感谢您的帮助。

【问题讨论】:

    标签: c# xaml windows-runtime winrt-xaml


    【解决方案1】:

    尝试在您的 xaml 中声明 StoryBoard

        <Storyboard>
            <ObjectAnimationUsingKeyFrames BeginTime="0:0:0" 
                Storyboard.TargetName="ImageHolder" Storyboard.TargetProperty="Source">
                <DiscreteObjectKeyFrame KeyTime="0:0:0" 
                   Value="{Binding Source={StaticResource Frame1Image}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:1" 
                   Value="{Binding Source={StaticResource Frame2Image}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:2" 
                   Value="{Binding Source={StaticResource Frame3Image}"/>
                <!-- etc -->
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    

    因此,您必须将精灵添加到静态资源,并运行 StoryBoard。

    【讨论】:

    • 是的,但我想在不使用 Storyboard 的情况下做到这一点。还有其他方法吗?
    • 尝试在开始动画之前预加载图像。
    • 是使用 Dictionary&lt;int, BitmapImage&gt; 预加载实例的好方法,然后通过 int 索引访问它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多