4

我有一個Silverlight類庫,名爲MyClassLibrary。試圖使用ResourceDictionary,但它的樣式沒有找到

其中,我有一個用戶控件,稱爲MyControl。

在控制我定義用戶資源:

<UserControl.Resources> 
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox"> 
     (lots of xaml) 
    </Style> 
</UserControl.Resources> 

控制消耗的風格是這樣的:

<ComboBox Style="{ StaticResource ComboBoxStyle }"></ComboBox> 

這一切能夠完美的組合框附帶了正確的風格,所以我知道風格寫得正確。

我真正想要的是將樣式放在資源字典中,以便可以在此程序集中使用幾種不同的控件。所以我在SAME程序集中創建了一個資源字典。我稱之爲ResourceDictionary.xaml。

我將Style定義從我的用戶控件移動到資源字典。

所以後來資源字典是這樣的:

<ResourceDictionary 
xmlns="etc" > 
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox"> 
     (lots of xaml) 
    </Style> 
</ResourceDictionary> 

控制的用戶資源,現在看起來是這樣的:

<UserControl.Resources> 
    <ResourceDictionary 
    Source="/MyClassLibrary;component/ResourceDictionary.xaml" x:Name="resDict"/> 
</UserControl.Resources> 

而控制作爲前仍消耗的風格完全相同的方式。

現在我知道它正在查找ResourceDictionary.xaml文件,因爲我試圖將「Source」屬性更改爲NonExistentFile.xaml,並且它抱怨說它無法找到該文件。它沒有對ResourceDictionary.xaml提出這種抱怨,所以我認爲它找到了它。

但是,當我運行該應用程序時,出現「無法使用名稱/鍵ComboBoxStyle查找資源」的錯誤。

我在做什麼錯?這看起來很簡單,並且不起作用。

在此先感謝您提供的任何幫助。

+0

Repro:創建一個SilverlightClassLibrary,添加一個「Silverlight用戶控件」,添加一個「Silverlight資源字典」。將一個樣式(稱爲MyStyle)添加到資源字典(對於ContentControl前景紅色),將一個ContentControl添加到用戶控件中,指向{StaticResource MyStyle}中的Style。最後,使用Source路徑將ResourceDictionary添加到usercontrol資源中,就像您擁有它一樣。將Silverlight應用程序添加到解決方案中,引用類庫項目,將庫控件的實例添加到MainPage的Xaml。運行,工作正常,如預期的那樣具有紅色前景。 – AnthonyWJones 2010-01-30 18:35:21

+0

換句話說,我看不出你在做什麼有什麼問題。你能提供任何其他細節,可能會使你所做的與Repro不同嗎? – AnthonyWJones 2010-01-30 18:37:10

回答

2

不知道這是否有助於準確,但我有我的ResourceDictionaries中的App.xaml:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Sausage/Bangers.xaml"/> 
      <ResourceDictionary> 
       .. other stuff, e.g. 
       <helpers:NotOperatorValueConverter x:Key="NotOperatorValueConverter" /> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

即使你不喜歡的方式,你可以看到我的資料來源=跟你不一樣。

+0

我同意使用MergedDictionaries是一種更好的模式,因爲它允許UserControl除了包含外部資源之外還擁有其他自己的資源。不過,我認爲你已經錯過了Dia正在建立一個控制庫的事實。沒有App.Xaml。此外,輸出是一個dll而不是xap,因此您擁有的源路徑不能用於添加到庫項目的資源字典。組件資源路徑是必需的。 – AnthonyWJones 2010-01-30 18:22:35

+0

你說得對:到最後的時候,我已經忘記了這一點。 – serialhobbyist 2010-01-30 18:46:35

0

謝謝你們兩位,你們的回答確實讓我解決了它。

我真的有什麼事情是這樣的:

<UserControl.Resources> 
    <Style ...> stuff </Style> 
</UserControl.Resources> 

要我加入我的所以它看起來像這樣

<UserControl.Resources> 
    <Style ...> stuff </Style> 
    <ResourceDictionary Source="..." /> 
</UserControl.Resources> 

現在,這個編譯非常beatifully只是將無法運行。我不明白我需要使用MergedDictionaries。於是我得到了這個概念並重新組織了這個部分,現在這一切都很精美。

非常感謝!

相關問題