2011-09-13 17 views
4

私は2つのリソースディクショナリを持っています。 1つはResDictGlass.xaml、もう1つはResDictNormal.xamlです。どちらも同じ特性と異なる値を持っています。リソースディクショナリを削除し、WPFに別のリソースを追加します。

:私のようにXAMLでテキストブロックを設定

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

:ResDictNormal.xamlで同じスタイルがある

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

:たとえば

ResDictGlass.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

はいあなたは2つの辞書のいずれかを持っているしたいと思うが、両方のアプリで合併しません。さもなければ、あいまいなresourecは参照時にエラーを投げます。

DynamicResourceStaticResource以上にする必要がある場合は、テーマを動的に更新する必要がある場合(つまり、UIの再読み込みを一切行わない場合)に注意してください。

これが役立つかどうか教えてください。

+0

こんにちは天使、返信いただきありがとうございます。私は2つのラジオボタンを持っています.1つは普通のもの、もう1つはフリップです。私はこれらのスタイルをラジオボタンの選択に従って交換したいと思います。だから私は1つを削除し、もう一方を追加する必要がありますか? – sony

+0

はい、古いマージされた辞書を削除し、新しい辞書を追加する必要があります。また、 'StaticResource'ではなく、' DynamicResource'マークアップ参照を使用してください。私はC#のコードを通じてこれを削除するにはどうすればよい –

+0

?おかげ – sony

関連する問題