2017-04-06 22 views
0

特定の条件によって、実行時に異なるスタイルのResourceDictionaryを動的にロードできますか?UWP - 異なるStyles.xamlを動的にロードする

私は自分のアプリケーションの1つのビルドを持っていますが、特定の設定に応じて色/ブランドが異なります。 上記を実行できないとすれば、これを達成するのが最もよいでしょうか?

答えて

1

ResourceDictionaryは、UWPではなく、私が覚えている限り実行時に動的に設定することはできません。 IMHO唯一の方法は、ColorBrushesまたはスタイル全体を変更することです。

最初のオプション:あなたは、動的に色を変更する必要がある場合は、ResourceDictionaryの

<SolidColorBrush x:Key="MyBrush">#333344</SolidColorBrush> 

以内ブラシを作成するというように、あなたのスタイル/ XAMLのレイアウトとし、それを使用する必要があります。

これを変更するには、(リソースリピータセットが1つだけであるか、またはカラーブラシを含むものが最初であると仮定して)ブラシを辞書から取り出し、その色を置き換える必要があります。

if (Application.Current.Resources.MergedDictionaries[0].ContainsKey("MyBrush")) 
{ 
    var brush = Application.Current.Resources.MergedDictionaries[0]["MyBrush"] as SolidColorBrush; 
    if (brush != null) 
    { 
     brush.Color = return new Color() { A = 255, R = r, G = g, B = b }; 
    } 
} 

二番目のオプション:あなたは、実行時に全体のスタイルを変更する必要がある場合(あなたがMyStyleはとMyOtherStyleは、リソースディクショナリ内に設定されていて、MyControlと命名いくつかの制御に適用したいと仮定します):

switch(anyValue) 
{ 
    case 1: 
      var myStyle = Application.Current.Resources["MyStyle"] as Style; 
      if(myStyle != null) 
      { 
       MyControl.Style = myStyle;     
      } 
      break; 
    case 2: 
      var myOtherStyle = Application.Current.Resources["MyOtherStyle"] as Style; 
      if(myOtherStyle != null) 
      { 
       MyControl.Style = myOtherStyle;     
      } 
      break; 
} 

3番目のオプション:コントロールのVisualStatesを設定してスタイルを変更します。変更したいコントロールのために独自のVisualStateを作成し、それを手動で切り替える必要があります。決してそれを試したことがないので、私はこの方法がどれほど信頼できるかわかりません。これは、パフォーマンス(想定のみ)の場合の最良の方法ですが、すべてのコントロールに対してVisualStatesを手作業で保つことは、独自のVisualStateManagerを実装する必要があり、必要なときに適切なVisualStateを維持することに問題を引き起こす可能性があります。

+0

鮮やかな - 多くのありがとう。これで十分な以上にそれを確かな答えを宣言する! – RCairns

関連する問題