當我們需要在程序中替換主題,更換另一套背景、顏色、樣式時,如何在不修改資源Key值,直接替換呢?
問題&疑問
1. Key值沖突
同一ResourceDictionary中,不可以使用相同Key

2. 資源替換
添加倆套樣式,Xaml下是否可以將原有的資源(如樣式)替換成新的資源?
加載順序是否會沖突,比如倆個字典中都存有Image.Search圖片資源,最終會以哪個字典中的資源為准呢

ResourceDictionary的合並方案
WPF的ResourceDictionary合並時,合並的規則能解決此沖突及加載順序問題
ResourceDictionary合並:
- 檢查ReourceDictionary所有資源Key列表
- 檢查ResourceDictionary.MergedDictionaries中的字典,從列表尾部遍歷到表頭。
- 按以上檢查順序,檢查到相同Key值時,會以檢查到的首個Key為准。即添加字典時,最后一個字典下的資源。
詳細的官方文檔,截圖如下:

所以,不同主題的資源,可以通過MergedDictionaries添加不同的字典,以加載順序來覆蓋之前的主題資源。
