2013-01-17 78 views
1

我在我的繩索結束與此。我花了無數個小時試圖解決這個問題,沒有這樣的運氣。SilverLight控制庫 - 無法引用相對MergedDictionary Generic.xaml

問題

在我的自定義控件類的簡短說明,當我檢查Application.Current.Resources [「鑰匙」]我返回null。這個「Key」風格位於本地字典中,應該由我的Control Library的themes/generic.xaml資源與Application.Current.Resources合併。

如何在我的SilverLight控件庫的themes/generic.xaml中引用/確認對MergedDictionary的引用。

這是甚至可能或我的想法如何合併資源被認爲是完全合併錯誤?

請幫忙。提前致謝。

問題

的長說明我有一個Silverlight控件庫與一個控制文件夾和一個主題文件夾。在Themes文件夾中我有generic.xaml。它的內容:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/SilverLightLib;component/Themes/EnhancedLabelDict.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

在Themes文件夾中我有EnhancedLabelDict.xaml。其內容如下:

<Style x:Key="ReadOnlyTextBox" TargetType="TextBox"> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Background" Value="#FFFFFFFF"/> 
     <Setter Property="Foreground" Value="#FF000000"/> 
     <Setter Property="Padding" Value="2"/> 
     <Setter Property="BorderBrush"> 
     <!-- A lot more code --> 
</Style> 

這兩個文件構建操作都設置爲Page。

現在我不知道如果generic.xaml甚至加載我的資源。我可以告訴的唯一方法是如果我之間放置一些未格式化的文本。這會導致錯誤。

如果我用我的ResourceDictionary不正確的路徑,我收到運行時錯誤 - 「無法分配財產‘System.Windows.ResourceDictionary.Source’

在我的控制文件夾,我有EnhancedLabel.cs它擴展了ContentControl。它裏面的構造,我創建了一個新的文本框,並分配給它的風格像這樣:

Style style = Application.Current.Resources["ReadOnlyTextBox"] as Style; 
this.textBox.Style = style; 

我有這種風格同時在App.xaml中和我的EnhancedLabelDict.xaml這是我的圖書館內。當我在App.xaml中註釋出Style時,找不到'ReadOnlyTextBox'樣式(null)。取消註釋,它被發現。

我不明白爲什麼我不能從我的EnhancedLabel.cs中引用我的樣式。

如果我使用EnhancedLabelDict.xaml,請將其添加到我的主應用程序中Resources文件夾內的Themes文件夾中。如果我然後添加以下到我的App.xaml:

<ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/SilverLightPOC;component/Resources/Themes/EnhancedLabelDict.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 

我的控制工程!所以除了路徑之外,沒有什麼不同。但是這不起作用,因爲我不想在主應用程序中存儲我的庫依賴的Dictionary文件。

請幫忙。

+0

我個人不使用generic.xaml什麼。在你試圖引用的同一個項目的app.xaml中聲明你的MergedDictionaries(使用正確的路徑),在你的情況下,只需將你的app.xaml指向EnhancedLabelDict.xaml,那應該是它的結束。作爲評論提交,因爲我無法知道它是否是一種解決方案,除非我可以對其進行檢查。 –

+0

@ChrisW。謝謝你的建議。我希望可以使用EnhancedLabel所依賴的字典,並在與控件相同的庫中引用該字典。我不想在主應用程序的App.xaml中合併字典。我想這會使它不便攜。再次感謝您的建議,現在我會使用它,但我會繼續尋找另一種解決方案。 – Agilis

+0

等一下,什麼?我想你可能會誤解。 App.xaml只能指向你的資源字典。你實際上並沒有使你的app.xaml成爲資源字典?我有一個包含100多個項目的解決方案,它使用3個資源字典,當前只有1個資源字典,它的工作原理是Dandy;) –

回答