簡體   English   中英

如果圖像的“構建操作”屬性為“內容”,為什么在WPF項目中打包圖像的URI不起作用

[英]Why packing an URI for an image in a WPF project doesn't work if the Build Action property of the image is Content

我正在嘗試在實現Pack URI的WPF項目中使用圖像文件。 根據Head First C#一書,將圖像的Build Action屬性更改為Content是一種很好的做法。 按照本指南將圖像作為內容,我無法使其正常工作,但是,將圖像Build Action屬性更改為Resource可以使其正常工作。 這是我的方法代碼:

public static BitmapImage CreateImageFromAssets(string imageFilename)
{
        try
        {
            Uri uri = 
                new Uri("pack://application:,,,/Assets/" +
                imageFilename, UriKind.Absolute);
            return new BitmapImage(uri);
        }
        catch (IOException)
        {
            return new BitmapImage();
        }
}

我嘗試使用其他選項,例如:

Uri uri = 
    new Uri("pack://application:,,,/BeesOnAStarryNight;component/Assets/" 
    + imageFilename, UriKind.RelativeOrAbsolute);
Uri uri = 
    new Uri("pack://application:,,,/BeesOnAStarryNight;component/Assets/" 
    + imageFilename, UriKind.Absolute);

圖像文件的名稱是“ Bee1.png”。 這是我得到的錯誤:

PresentationCore.dll中發生類型為'System.InvalidOperationException'的未處理異常

我嘗試了沒有嘗試抓住,並得到了:

mscorlib.dll中發生了類型為'System.IO.DirectoryNotFoundException'的未處理異常

附加信息:找不到路徑“ C:\\ Users \\ myuser \\ TRAINING \\ DEV \\ Assets \\ Bee1.png”的一部分。

不知道為什么我的解決方案文件夾路徑不完整。 / DEV之后是幾個文件夾。

是否想知道為什么只有在圖像具有Resource的Build Action屬性時才起作用? 並將它用作內容是否真的是一個好習慣?

您的URI是一個資源文件包URI ,無需指定UriKind就可以創建它,例如

var uri = new Uri("pack://application:,,,/Assets/" + imageFilename);

就像名稱“ Resource File Pack URI”所暗示的那樣,圖像文件必須是資源文件,即其Build Action必須是Resource

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM