2017-10-11 90 views
0

我試圖在WPF窗口從文件加載位圖圖像,但我發現下面的BitmapImage上EndInit()拋出NotImplementedException

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窗口都在本機應用程序中相關。

+0

請張貼堆棧跟蹤的文本和**不是作爲一個圖像** –

+1

'PackUriHelper.Create'似乎沒有意義在這裏,因爲你已經有一個包URI。在標準的WPF應用程序中,'img.UriSource = new Uri(@「pack:// application:,,,/Images/TestImage.png」)就足夠了。對於非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。我強制將BitmapImage初始化爲我的綁定Image屬性的getter,並且不再拋出。

我也注意到,我能夠正確解析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; 
} 
相關問題