我該怎麼辦 - ?資源?載入主題(資源字典),但
- 負載大
ResourceDictionary
與(或不)MergedDictionaries
,但只添加未在其中找到資源(Application.Current.Resources)和更新發現這些密鑰。
我想這樣做,因爲我對我的wpf應用程序有很多主題,但是一些控件樣式是固定的。所以我首先清除所有資源,然後加載新的資源(一切都被清除)。有很多固定的樣式控件,所以我無法加載每個人的。
我該怎麼辦 - ?資源?載入主題(資源字典),但
ResourceDictionary
與(或不)MergedDictionaries
,但只添加未在其中找到資源(Application.Current.Resources)和更新發現這些密鑰。我想這樣做,因爲我對我的wpf應用程序有很多主題,但是一些控件樣式是固定的。所以我首先清除所有資源,然後加載新的資源(一切都被清除)。有很多固定的樣式控件,所以我無法加載每個人的。
Application.Resources是一個ResourceDictionary。你加載的字典也是一個ResourceDictionary。您可以通過添加將資源添加到ResourceDictionary。您可以枚舉ResourceDictionary中的資源,因爲它實現了ICollection。您還可以查詢資源是否存在,因爲它實現了IDictionary。 ResourceDictionary可以在其ResourceDictionaries集合中包含其他ResourceDictionaries:MergedDictionaries。
你想合併這些取決於一些事情。我使用的一種策略是在ResourceDictionary級別進行合併,因此我從Application.Resources.MergedDictionaries中刪除ResourceDictionary,然後添加我加載的ResourceDictionary。如果你想通過增加存在於您的ResourceDictionary單一的資源進行合併,但不Application.Resources存在,你可以列舉如下:
void AddOrUpdate(DictionaryEntry resource)
{
// If it exists, remove it; contains checks base and merged dictionaries
if (Application.Current.Resources.Contains(resource.Key))
{
// Must try to remove from all; if it doesn't exist there is no effect
Application.Current.Resources.Remove(resource.Key);
foreach (ResourceDictionary nextDictionary in Application.Current.Resources.MergedDictionaries)
nextDictionary.Remove(resource.Key);
}
// We can now add it
Application.Current.Resources.Add(resource.Key, resource.Value);
}
void MergeMyDictionary(ResourceDictionary myResourceDictionary)
{
foreach (DictionaryEntry nextResource in myResourceDictionary)
AddOrUpdate(nextResource);
foreach (ResourceDictionary nextDictionary in myResourceDictionary.MergedDictionaries)
{
foreach (DictionaryEntry nextResource in nextDictionary)
AddOrUpdate(nextResource);
}
}
不知道你的意思。找到並找不到哪裏?你究竟想要做什麼? –
@AresAvatar更新 – Code0987