4

私のカスタム画像ボックスには、スクロールビューアと画像が含まれています。文字列型の依存プロパティ Image を使用してイメージを設定します。

public static DependencyProperty ImageProperty = DependencyProperty.Register(
"Image", typeof(string), typeof(CustomPictureBox), new FrameworkPropertyMetadata("", new  PropertyChangedCallback(OnImageChanged)));


private static void OnImageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
  CustomPictureBox cpb = (CustomPictureBox)d;
  if (e.Property == ImageProperty)
  {
    string newvalue = e.NewValue as string;
    if (!(string.IsNullOrEmpty(newvalue)))
    {
      var bmp = new BitmapImage();
      bmp.BeginInit();
      bmp.UriSource = new Uri(newvalue);
      bmp.CacheOption = BitmapCacheOption.OnLoad;
      bmp.EndInit();

      cpb.imgPicture.Source = bmp;
    }
    else
      cpb.imgPicture.Source = null;
  }
}

画像はフレーム グラバーを介して取得され、「camera_image.tif」という名前で特定の場所に保存されます。Image プロパティは、このファイル名に設定されます。新しい画像の取得を開始するときに、バインドを介して Image プロパティを null に設定すると、画像ボックスが更新されて画像が表示されなくなります。画像の取得が完了したら、「camera_image.tif」に再度設定します。問題は、新しい画像が表示されないことです。代わりに、画像ボックス内に表示されるのは常に最初に取得された画像です。画像ファイルを確認すると、新しいコンテンツが含まれています。

画像ボックスで画像を更新するにはどうすればよいですか?

よろしく、

タビナ

4

1 に答える 1

9

ここで答えを見つけました:

wpf とここで画像をリロードします。 WPF Image.Source キャッシュが積極的すぎる

bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.CreateOptions = BitmapCreateOptions.IgnoreImageCache;

私が探していたソリューションです!

于 2012-05-11T10:16:02.247 に答える