1

ボタンの背景を画像ソースに変更しようとしています。ページに移動するときにその画像をメモリにロードして、最初に表示されたときにちらつかないようにします。

Windows Phoneでは、次のように画像ソースを作成できました。

  StreamResourceInfo resourceInfo = Application.GetResourceStream(uri);
  BitmapImage bitmapSource = new BitmapImage();

  // Avoid flicker by not delay-loading.
  bitmapSource.CreateOptions = BitmapCreateOptions.None;

  bitmapSource.SetSource(resourceInfo.Stream);

  imageSource = bitmapSource;

Windows8ストアアプリで同様のことを試しました。

  BitmapImage bitmapSource = new BitmapImage();
  bitmapSource.CreateOptions = BitmapCreateOptions.None;
  bitmapSource.UriSource = uri;
  imageSource = bitmapSource;

しかし、同じ問題が発生します。ボタンにはすでに背景とは異なる画像があり、特定のイベントで新しい背景に変更したいと思います。しかし、ソースを変更すると、目立ったちらつきが見られます。これは、画像ソースが2回目に変更されたときに問題が解消されるため、画像がまだメモリにないためだと思います。

誰かが解決策を知っていますか?どういうわけかこの画像の読み込みを強制する必要があります。

ありがとう!

4

2 に答える 2

3

SetSourceAsyncBitmapImageのメソッドを使用し、それを画像ソースにアタッチする前に待機すると、ちらつきが表示されないはずです。-

// Ensure the stream is disposed once the image is loaded
using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
    // Set the image source to the selected bitmap
    BitmapImage bitmapImage = new BitmapImage();
    await bitmapImage.SetSourceAsync(fileStream);
    imageSource  = bitmapImage;
}

MSDNドキュメントには、これに関する詳細情報があります

于 2013-01-09T08:24:46.057 に答える
0

ロスに感謝しますが、代わりに私がやったのは、もちろんリソースを除いて、上記と同様のコードを使用して、必要な半ダースほどのビットマップをプリロードしたことです。これは、ページが読み込まれたときに非同期で行い、次にボタンの背景にImageSourceを設定したときに、すでに事前に読み込まれたビットマップを使用しました。そうすれば、ビットマップのすべてのインスタンスに新しいメモリチャンクが割り当てられていないことがわかります。

于 2013-01-11T18:27:25.750 に答える