特定の条件によって、実行時に異なるスタイルのResourceDictionaryを動的にロードできますか?UWP - 異なるStyles.xamlを動的にロードする
私は自分のアプリケーションの1つのビルドを持っていますが、特定の設定に応じて色/ブランドが異なります。 上記を実行できないとすれば、これを達成するのが最もよいでしょうか?
特定の条件によって、実行時に異なるスタイルのResourceDictionaryを動的にロードできますか?UWP - 異なるStyles.xamlを動的にロードする
私は自分のアプリケーションの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を維持することに問題を引き起こす可能性があります。
鮮やかな - 多くのありがとう。これで十分な以上にそれを確かな答えを宣言する! – RCairns