2011-03-28 16 views
2

我下面棱鏡構建WPF應用程序的窗口。在我的應用程序中,有一個助手類庫,在這裏我定義了將由解決方案中的多個類庫使用的資源和樣式。設置資源或風格不同類庫

但是,當我嘗試將資源設置爲窗口的Style屬性時出現錯誤。該窗口與資源不同,屬於不同的類庫。

我得到的錯誤是: 找不到名爲'{resourceName}'的資源。資源名稱區分大小寫。錯誤在標記文件對象「mywindow的」

我用下面的代碼,但它不工作

<Window x:Class="Class1" Style="{StaticResource resourceName}"> 

<Window.Resources>  
     <ResourceDictionary>  
     <ResourceDictionary.MergedDictionaries> 

     <ResourceDictionary Source="pack://application:,,,/classlibrary;component/Dictionary/resource1.xaml" />    </ResourceDictionary.MergedDictionaries> 

    < /ResourceDictionary> 

< /Window.Resources> 
</Window> 
+0

您的代碼似乎被修剪掉。編輯,如果可能的話把完整的XAML。 – publicgk 2011-03-28 19:13:55

+1

誰低估了這個問題,請讓提問者(他似乎是stackoverflow的新手)知道爲什麼。 – publicgk 2011-03-28 19:17:24

+1

你爲什麼不發佈你遇到的錯誤 - 它會幫助人們回答你的問題。 – Zannjaminderson 2011-03-28 19:54:28

回答

1

您可以使用一個包的網址,獲取來自其他組件的資源字典。檢查this thread

這裏是從Common組件中讀取的資源辭典的例子:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
3

您需要使用DynamicResource標記擴展。原因是因爲您導入的外部ResourceDictionary在爲Window設置樣式之後在xaml中聲明。設置窗口的樣式與被引用的類庫中定義的風格的一個工作例子如下:

的「主窗口」 XAML:

<Window x:Class="WpfApplication3.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    Style="{DynamicResource TestStyle}"> 
<Window.Resources> 
<ResourceDictionary> 
<ResourceDictionary.MergedDictionaries> 
<ResourceDictionary 
Source="pack://application:,,,/ClassLibrary1;component/Styles.xaml"> 
</ResourceDictionary> 
</ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 
</Window.Resources> 
<Grid> 
</Grid> 
</Window> 

的資源字典(在一個名爲Styles.xaml文件定義)一個類庫:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<Style x:Key="TestStyle" TargetType="Window"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <SolidColorBrush Color="Green"></SolidColorBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 

</ResourceDictionary> 
+0

如果您不希望樣式在您的應用程序中全局可用,這是正確的解決方案。 +1 – 2011-08-29 14:40:41