スタイルを変更するために、次のことを行います。
- 必要なテーマの種類ごとにスタイル シートを作成します。
- プロジェクト全体のすべてのスタイル参照を「StaticResource」ではなくDynamicResourceに設定します。
- ResourceDictionaries の操作を使用します。
この例では、高品質、中品質、低品質のテーマがあります。私のスタイルシートのパスは次のとおりです。
- /Assets/Styles/GlobalStylesLow.xaml
- /Assets/Styles/GlobalStylesMed.xaml
- /Assets/Styles/GlobalStylesHigh.xaml
操作のコードは次のように機能します。
/// <summary>
/// Level of graphics quality enum.
/// </summary>
public enum GraphicsQuality
{
/// <summary>
/// Low
/// </summary>
Low = 0,
/// <summary>
/// Medium
/// </summary>
Medium = 1,
/// <summary>
/// High
/// </summary>
High = 2
}
/// <summary>
/// Sets the Application Resource Dictionaries based on selection.
/// </summary>
/// <param name="quality">The quality.</param>
/// <param name="onRedraw">The on redraw.</param>
public static void UpdateStyles(
Enums.GraphicsQuality quality = Enums.GraphicsQuality.High, Action onRedraw = null)
{
// Reset resource dictionaries
Application.Current.Resources.MergedDictionaries.Clear();
// Base style path
const string basePath = "/<project_base>;component/Assets/Styles";
// Evaluate global quality
switch (quality)
{
case Enums.GraphicsQuality.High:
LoadStyle(basePath + "/GlobalStylesHigh.xaml");
break;
case Enums.GraphicsQuality.Medium:
LoadStyle(basePath + "/GlobalStylesMed.xaml");
break;
case Enums.GraphicsQuality.Low:
LoadStyle(basePath + "/GlobalStylesLow.xaml");
break;
}
// Redraw
if (onRedraw != null)
{
onRedraw();
}
}
/// <summary>
/// Loads a specific style by Uri.
/// </summary>
/// <param name="stylePath">The style path.</param>
private static void LoadStyle(string stylePath)
{
var dic = new ResourceDictionary
{
Source = new Uri(stylePath, UriKind.Relative)
};
Application.Current.Resources.MergedDictionaries.Add(dic);
}
StyleSheet を変更する条件が存在する場合は、UpdateStylesを呼び出します。
注:
onRedrawパラメーターは、スタイルの更新後に実行する最後のアクションです。場合によっては合格したい
this.InvalidateVisual
UI の適切な更新に問題がある場合は、UI から。