我在我的繩索結束與此。我花了無數個小時試圖解決這個問題,沒有這樣的運氣。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文件。
請幫忙。
我個人不使用generic.xaml什麼。在你試圖引用的同一個項目的app.xaml中聲明你的MergedDictionaries(使用正確的路徑),在你的情況下,只需將你的app.xaml指向EnhancedLabelDict.xaml,那應該是它的結束。作爲評論提交,因爲我無法知道它是否是一種解決方案,除非我可以對其進行檢查。 –
@ChrisW。謝謝你的建議。我希望可以使用EnhancedLabel所依賴的字典,並在與控件相同的庫中引用該字典。我不想在主應用程序的App.xaml中合併字典。我想這會使它不便攜。再次感謝您的建議,現在我會使用它,但我會繼續尋找另一種解決方案。 – Agilis
等一下,什麼?我想你可能會誤解。 App.xaml只能指向你的資源字典。你實際上並沒有使你的app.xaml成爲資源字典?我有一個包含100多個項目的解決方案,它使用3個資源字典,當前只有1個資源字典,它的工作原理是Dandy;) –