2010-06-16 28 views
0

我對WPF並不熟悉,我只是覺得很困惑。在WPF應用程序中加載圖像

我想創建一個小小的電腦遊戲,並且還有我想動態顯示的元素。我使用Image類並將圖像添加到畫布。但我不確定這是否是一種好的做法。我覺得爲畫布添加控件似乎有點有線。我對性能有點擔心,因爲我可能需要很多圖像。

真正的問題是,我無法從圖像文件中加載圖像。我在這樣的教科書(XMAL)中看到一個示例:

<Image Panel.ZIndex="0" Margin="0,0,0,0" Name ="image1"> 
    <Image.Source> 
     <BitmapImage UriSource="Bell.gif" /> 
    </Image.Source> 
</Image> 

其中將Bell.gif添加到項目中。

我試圖在代碼中複製這個來創建一個圖像。

new Image { Source = new BitmapImage(new Uri("Blockade.bmp"))} 

但是我得到了無效的Uri異常。在互聯網搜索之後,我發現動態加載資源似乎很困難。我可以加載動態添加到項目的文件嗎?

如果我使用絕對路徑,那麼它是確定的。但我不能指望每臺電腦都將文件放在同一個位置。我可以使用相對路徑嗎?

我試圖

new Image { Source = new BitmapImage(new Uri(@"Pictures\Blank Land.bmp", UriKind.Relative)) } 

但它不工作。 (圖片爲空)

謝謝。

我刪除了代碼。我剛剛在MSDN的「Pack in URIs in WPF」中找到了解決方案。 我可以對本地程序集中的某個資源使用「pack:// application:,,,/Blockade.bmp」(絕對)或「/Blockade.bmp」(Relative)。 (我最初沒有使用'/') 「pack:// application:,,,/ReferencedAssembly; component/File.xaml」用於引用程序集。 (我猜的答案的問題是,權力部分缺失)

+0

我很驚訝你在教科書中發現的可怕例子。首先,它是可笑的冗長:它相當於''。其次,任何值得使用它的WPF教科書都不會教你爲控件分配名稱:它將以正確的方式使用數據綁定教會你。無論你做什麼,我強烈建議你停止閱讀該教科書並將其扔進垃圾箱。或者也許燒它。 – 2010-06-16 20:33:04

+0

順便提一下,哪本教科書可以提醒別人呢? – 2010-06-16 20:33:35

+0

實際上,ZIndex和Margin的存在是因爲控件是最後添加的,它直接拖到窗體中,並且值是手動更改的。我不確定爲什麼,但這就是書中定義資源的方式,通常是一種風格。 看到您的評論後,我認爲該書在WPF中可能並不專業(只有三章是針對該主題的)。書名是Visual C#2010 Step by Step。謝謝。 – LLS 2010-06-17 15:18:15

回答

2

以下工作:

new BitmapImage(new Uri("/MyProject;component/Resources/next.png", UriKind.Relative)); 

只需更換「MyProject的」與您的項目名稱,並調整路徑圖像。

確保將圖像添加到「BuildAction」設置爲「Resource」的項目中。

+0

謝謝。 你能解釋一下嗎?分號在字符串中的含義是什麼? – LLS 2010-06-17 15:21:11

+0

@LLS - 我不是100%確定,但我很確定它只是項目名稱和路徑之間的分隔符。 – ChrisF 2010-06-17 15:25:22

+0

不過,這不起作用。 (但沒有例外) 「BuildAction」默認設置爲「Resource」。而且我仍然只能使用絕對的Uri。 – LLS 2010-06-17 15:47:28

相關問題