2017-10-11 11 views
0

私は、WPFウィンドウにファイルからビットマップイメージをロードしようとしていますが、私はのBitmapImage()

BitmapImage img = new BitmapImage(); 
img.BeginInit(); 
img.CacheOption = BitmapCacheOption.OnLoad; 
img.UriSource = PackUriHelper.Create(new Uri(@"pack://application:,,,/Images/TestImage.png", UriKind.Absolute)); 
img.EndInit(); 
img.Freeze(); 

例外のスタックトレース以下EndInit()ライン上でスローされた例外を取得しています: stack trace

WPFウィンドウがネイティブアプリケーションでホストされている場合、このWPFウィンドウはすべて関連しています。

+0

は親切ではない画像として**テキストとしてスタックトレース投稿** –

+1

'PackUriHelper.Create'はすでにパックURIを持っているように、ここでは意味をなすようには見えません。 'img.UriSource = new Uri(@" pack:// application:,,,/Images/TestImage.png ")'は標準のWPFアプリケーションでは十分です。 WPF以外のアプリの場合、[この回答](https://stackoverflow.com/a/6005606/1136211)が役立ちます。 – Clemens

+0

[MSDN](https://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper(v = vs.110).aspx) - 私がPackUriHelperを使用しない場合、私は別の例外 "URIプレフィックスが認識されません" –

答えて

0

xamlリソースのいずれかがロードされる前に、BitmapImageを解決/ロードしようとしていたため、この例外がスローされていると思います。私はバインドされたImageプロパティのゲッターにBitmapImageの初期化を強制しましたが、もはや投げていません。

また、pack:// URIをXAML自体から直接解決できることに気付きました。

private BitmapImage _listIcon; 
public BitmapImage ListIcon 
{ 
    get 
    { 
     if (_listIcon == null) 
     { 
      _listIcon = ProvideListIcon(); 
     } 

     return _listIcon; 
    } 
} 

protected override BitmapImage ProvideListIcon() 
{ 
    BitmapImage img = new BitmapImage(new Uri("pack://application:,,,/[Project];Component/Images/TestImage.png", UriKind.RelativeOrAbsolute)); 
    if (img.CanFreeze) 
    { 
     img.Freeze(); 
    } 

    return img; 
} 
関連する問題