如何提高XAML WinRT图像变化速度?

时间:2012-10-02 21:38:54

标签: performance image xaml windows-runtime winrt-xaml

假设我想要快速显示可变数量的静态图像资源。

所以我有一个带

的INotifyPropertyChanged类
for (blah)
    bitMaps.Add(new BitmapImage(new Uri(blah + i + ".png")));
列表中的

和获取图像的属性

public ImageSource Image
{
    get
    {
        return bitMaps[Index];
    }
}

一起
public int Index
{
    set
    {
        _Index = value;
        OnPropertyChanged("Image");
    }
}

这样我就可以通过更改索引来更改显示的图像。

然后我有一个绑定的图像标记<Image Source="{Binding Image}" Stretch="None" />来显示它。

尽管最初似乎在加载位图图像,但是在改变索引时的转换在第一次引导我到BitmapImage延迟加载的事情时仍然会闪烁。这样做有更好/更高效的方法吗?或者我如何正确预加载图像?

更新:我最终创建了一个用户控件,其中所有的图片代码都已创建且不可见...

1 个答案:

答案 0 :(得分:1)

修改图像源时,您将始终获得闪烁。如果要预先加载图像,则可以将它们放在Visual Tree中。我的第一个建议是使用像这样的FlipView:

<FlipView ItemSource="{Binding Bitmaps}" SelectedIndex="{Binding Index}">
    <FlipView.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding}" />
        </DataTemplate>
    </FlipView.ItemTemplate>
</FlipView>

更改索引时,FlipView将显示已预加载的下一个/上一个图像。

如果您有数百张图片,请编写自己的自定义控件,循环显示图像。

但无论如何,如果更改图像的来源,丢弃旧位图和渲染新位图之间将存在差距。