2

いくつかの異なる PC タイプで使用される WPF アプリケーションを開発しています。最初のタイプは、デュアル高解像度モニターを備えた開発マシンです。2 つ目は、約 800x600 のハンドヘルド タッチ スクリーンです。

MVVM パターンを使用して、選択したモードに応じて多かれ少なかれ情報を表示するいくつかの異なるビューを開発しました。一般に、レイアウトは十分にスケーリングされます。

ダイアログ ボックスもいくつかありますが、現時点ではこれらは高解像度モード用に最適化されています。残念ながら、ボタンはタッチ スクリーン上では非常に小さく表示され、確実に押すのは困難です。

ダイアログのスタイルを動的に変更する方法を考えていました。画面の種類を設定してスタイルを制御する 1 つのアプリケーション設定が必要です。たとえば、画面がタッチ スクリーンの場合、すべてのボタンとメニューのデフォルト サイズが大きくなります。

テーマは行くべき道ですか?もしそうなら、誰かが私に良いチュートリアルを教えてもらえますか? (既存のテーマを使用するだけでなく、それらを作成することもできます)

4

1 に答える 1

4

スタイルを変更するために、次のことを行います。

  1. 必要なテーマの種類ごとにスタイル シートを作成します。
  2. プロジェクト全体のすべてのスタイル参照を「StaticResource」ではなくDynamicResourceに設定します。
  3. 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 から。

于 2012-10-08T13:19:09.270 に答える