[英]Merge DictionaryResource from Application in a ClassLibrary
我有一個Windows Phone 8.1解決方案,其中包含一個標准應用程序項目和一個類庫項目。 我的想法是,我可以以某種方式將StaticResources
分解為ClassLibrary,以便它可以覆蓋現有的類。 我舉一個例子:在我的ClassLibrary中,我有一個ClassLibraryDictionary.xaml
其中包含以下代碼:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ClassLibraryTest">
<SolidColorBrush x:Key="MyButtonColor" Color="#FF0000FF" />
</ResourceDictionary>
想法是,在MainApplication中,我可以擁有一個具有相同StaticResource
鍵的Dictionary.xaml,並將其傳遞給ClassLibrary,以便它可以覆蓋默認屬性,例如:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MainApplicationTest">
<SolidColorBrush x:Key="MyButtonColor" Color="#00FF00FF" />
</ResourceDictionary>
並將其傳遞給代碼:
var mainAppDictionary = new ResourceDictionary();
mainAppDictionary.Source = new Uri("/using:MainApplicationTest;component/MainApplicationDictionary.xaml", UriKind.RelativeOrAbsolute);
classLibraryTest.SetResourceDictionary(mainAppDictionary);
這里的問題是我似乎無法在ClassLibrary中使用ResourceDictionary實例,而且我甚至不確定這是否是實現此目的的最佳方法。
那么,我該如何解決呢?
我發現了如何做到這一點,實際上很簡單。 我使用的路徑不是正確的路徑,因此,如果要在App.xaml
(在MainApp中)中進行操作,那么總結一下XAML中的解決方案是這樣的:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx://Common/yourclasslibraryname/ClassLibraryDictionary.xaml"></ResourceDictionary>
<ResourceDictionary Source="/Dictionary1.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
如果要直接在ClassLibrary中的代碼中進行設置,可以執行以下操作:
在MainApp.xaml.cs
myClassLibrary.MergeAllDictionaries(App.Current.Resources);
在ClassLibrary
:
public void MergeAllDictionaries(ResourceDictionary appDictionary) {
// First copy all keys from MainApp to a new Dictionary
ResourceDictionary mainDictionary = new ResourceDictionary();
foreach(var keys in appDictionary.MergedDictionaries) {
foreach(var keys1 in keys) {
mainDictionary.Add(keys1.Key, keys1.Value);
}
}
// Then clear all
appDictionary.Clear();
// Get the ClassLibrary dictionary
ResourceDictionary classLibraryDictionary = new ResourceDictionary();
classLibraryDictionary.Source = new Uri("ms-appx://Common/yourclasslibraryname/ClassLibraryDictionary.xaml", UriKind.RelativeOrAbsolute);
// First add the ClassLibrary keys and values
appDictionary.MergedDictionaries.Add(classLibraryDictionary);
// Then add the old values, so that they overwrite the ClassLibrary ones
appDictionary.MergedDictionaries.Add(mainDictionary);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.