2011-09-13 97 views
4

我有兩個資源字典。一個叫ResDictGlass.xaml,另一個叫ResDictNormal.xaml。兩者具有相同的屬性和不同的值。例如刪除資源字典並在WPF中添加另一個字典

ResDictGlass.xaml有一種風格是這樣的:

<Style x:Key="StyleTitleText" TargetType="TextBlock"> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="FontSize" Value="14"/> 
    <Setter Property="Foreground" Value="Green" /> 
</Style> 

在ResDictNormal.xaml同樣的風格是:

<Style x:Key="StyleTitleText" TargetType="TextBlock"> 
    <Setter Property="FontFamily" Value="Tahoma" /> 
    <Setter Property="FontSize" Value="14"/> 
    <Setter Property="Foreground" Value="WhiteSmoke" /> 
</Style> 

我設置的文本塊在XAML爲:

<TextBlock Style="{DynamicResource StyleTextblock}" Text="Prod.Code" VerticalAlignment="Top" /> 

我想在運行時在這些樣式之間切換。我做的是這樣的:

  case "normal": 
       ResourceDictionary ResDict1 = new ResourceDictionary(); 
       ResDict1.Source = new Uri("/ResDictNormal.xaml", UriKind.RelativeOrAbsolute); 
       Application.Current.Resources.MergedDictionaries.Add(ResDict1); 
       break; 

      case "flip": 
       ResourceDictionary ResDict2 = new ResourceDictionary(); 
       ResDict2.Source = new Uri("/ResDictGlass.xaml", UriKind.RelativeOrAbsolute); 
       Application.Current.Resources.MergedDictionaries.Add(ResDict2); 
       break; 

這是正確的做法嗎?我們是否必須刪除當前字典,然後添加字典?

回答

4

是的,你會想要在應用程序中合併兩個字典中的任何一個,而不是兩個。否則不明確的資源會在他們的參考資料上拋出錯誤。

另外請記住,如果主題需要動態更新UI(即在整個UI重新加載的情況下),則可能需要使用DynamicResource而不是StaticResource

讓我知道這是否有幫助。

+0

嗨天使,謝謝你的回覆。我有兩個單選按鈕,一個用於正常,另一個用於翻轉。我想根據單選按鈕選擇交換這些樣式。所以我必須刪除一個並添加另一個? – sony

+0

是的,你將不得不刪除舊的合併字典,並添加一個新的。還要記住使用'DynamicResource'標記引用而不是'StaticResource'。 –

+0

如何通過C#代碼刪除?,謝謝 – sony