2010-05-26 21 views
10

我有一個WPF應用程序,我想在其中使用一些靜態資源。我創建了一個包含資源的資源庫XAML文件。我還通過「屬性」面板在項目的資源中添加了一個字符串。如何在WPF中使用全局資源?

我以爲我可以只使用這些資源綁定表達式:

{StaticResource ResourceName} 

但Visual Studio是告訴我的資源沒有被發現。我必須在我的XAML中包含某種形式的參考嗎?我唯一所看到的例子包括本地資源,如:

<Window.Resources>, <Page.Resources> etc 

我不想在本地包括資源,因爲我希望他們能夠提供給應用程序的多個部分。

回答

9

,把它們放進App.xaml中:)

在每個WPF應用程序有一個 的App.xaml(及其相應代碼 文件,App.xaml.cs或App.xaml.vb) 它作爲 應用程序範圍的聲明的全局文件。您可以使用此文件 在應用程序中聲明常量 外觀。 例如,您可以爲 應用程序中的所有按鈕聲明默認的 紅色背景。

http://www.microsoft.com/emea/msdn/thepanel/en/articles/introduction_wpf.aspx

+0

在我的項目中,這是默認命名爲Application.xaml。這是一個很好的答案,但我可以不讓全局的ResourceLibrary中的樣式可用嗎? – Banford 2010-05-26 09:59:21

+0

鏈接不工作 – tabby 2016-08-05 06:59:38

2

只看 「靜態資源查找行爲」 here的部分。應用程序資源字典中的任何內容(即Application.Resources)均可在全球範圍內使用。無論何時使用給定鍵查找資源,並且該鍵在本地資源字典的層次結構中的任何位置都沒有使用,應用程序字典中的字典將被返回。

要在XAML中填充應用程序的資源字典,請找到該應用程序的XAML文件(通常是App.xaml)並添加一個Application.Resources元素。

+0

我可以理解查找行爲是如何工作到這個Application.Resources區域的,但是我將如何使用在該項目上設置的資源。例如。右鍵單擊項目文件,單擊屬性,轉到資源。我的意思是那裏的資源。這些不包含在我的Application.Resources中,也不是我的資源庫xaml文件。 – Banford 2010-05-27 09:49:08

+0

所以我用.. 這通過允許解決的問題之一我在我的外部資源字典中使用樣式。儘管如此,仍然在實際的項目資源上掙扎。 – Banford 2010-05-27 09:55:22

+0

對不起,我沒有注意到你正在嘗試使用項目資源。項目資源和資源字典實際上是兩回事。如果你有(例如)一個圖像是一個項目資源,你可以通過''將其獲取到資源字典中。但並非每個WPF類都有一個'Source'屬性,可以從項目資源中加載它。 – 2010-05-27 16:24:15

0

只需在這裏添加我的2美分。

我也想使用全局資源,但我使用自定義的應用程序類,所以我不能把它放在App.xaml中。

我在根目錄創建一個Resources.xaml,然後這樣做:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/MyWpfClient;component/Resources.xaml", UriKind.Relative) }); 

但要注意,在Resource.xaml必須有生成操作「頁」。當它沒有找到一些我用作轉換器的類型時。

2

您可以創建全球資源的字典,包括它的路徑在App.xaml中

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/YourProject;Component/YourXamlFile.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

現在在YourXamlFile.xaml所有的資源將是全局可見在您的項目。