私の Windows Phone 8 アプリでは、場所/Styles/DefaultStyles.xamlにある xaml ファイルでいくつかの暗黙的なスタイルが定義されています。
同様のファイルがありますが、色、フォントなどが異なります... /Styles/GreenStyles.xamlで定義されています。
次のように、App.xaml で既定のスタイル ファイルを参照します。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/DefaultStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
アプリで、他のスタイル ファイル (GreenStyles) から暗黙的なスタイルをプログラムで切り替えるようにしたいと考えています。
どうすればこれを達成できますか?
**
アップデート:
リソース ディクショナリのソースを次のように変更できました。
ResourceDictionary style = App.Current.Resources.MergedDictionaries.ToList()[0];
string source = String.Format("/ApplicationName;component/Styles/GreenStyles.xaml");
style.Source = new Uri(source, UriKind.Relative);
注:例外を避けるために、コンポーネントという単語はそのように記述する必要があります
ここで問題があります。ディクショナリのソースが変更されると、暗黙的なスタイル( x:Key属性を持たないスタイル) のみが切り替えられます。
キーが指定され、両方のファイルで 2 回 (異なる属性で) 定義されたその他のスタイルは、UI に反映されません。
これらのファイルがある場合: DefaultStyles.xaml:
<Style x:Key="MainGrid" TargetType="Grid">
<Setter Property="Background" Value="Red"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="24"/>
</Style>
</ResourceDictionary>
そして: GreenStyles.xaml:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone">
<Style x:Key="MainGrid" TargetType="Grid">
<Setter Property="Background" Value="Green"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Green"/>
<Setter Property="FontSize" Value="24"/>
</Style>
</ResourceDictionary>
そして、ソースを GreenStyles.xaml を指すように切り替えました。スタイルMainGridを持つグリッドは、引き続きRedの背景を持ちます。
この理由は何ですか?