1

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

所以我有一个 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 是延迟加载的。有没有更好/更高效的方法来做到这一点?或者如何正确预加载图像?

更新:我最终只是创建了一个用户控件,其中包含所有已创建且不可见的图像标签......

4

1 回答 1

1

修改图像源时,您总是会出现闪烁。如果要预加载图像,则可以将它们放在可视树中。我的第一个建议是使用这样的 FlipView:

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

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

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

但无论哪种方式,如果您更改图像的来源,则在丢弃旧位图和渲染新位图之间会有差距。

于 2012-10-08T03:51:34.400 回答