3

WPF では、以下のように、ターゲット タイプに基づいてスタイルを取得できます。

control.Style = (Style)toplevelcontrol.TryFindResource(typeof(control))

しかし、WinRT ではそれができません。リソースを取得するにはキーしか使用できません。ターゲット タイプに基づいてリソースを取得することは可能ですか? これを解決するのを手伝ってください。

前もって感謝します

4

2 に答える 2

1

ここでリソースを処理するための WPF と Winrt の主な違いはFindResource()、WPF オブジェクトでは兄弟を取得するのに対し、Winrt ではResourcesプロパティだけを取得することです。

TargetTypeただし、オブジェクト タイプをスタイルのキーとして使用する基本的な手法は引き続き機能します。必要なことを行うための単純なヘルパー拡張メソッドを次に示します。

public static object TryFindResource(this FrameworkElement element, object key)
{
    if (element.Resources.ContainsKey(key))
    {
        return element.Resources[key];
    }

    return null;
}

WPF と同じように呼び出します。

control.Style = (Style)toplevelcontrol.TryFindResource(control.GetType());

(元の例は変数のようにコンパイルされずcontrol、変数で使用できないことに注意してくださいtypeof。上記の例の呼び出しのバグを修正しました)。

于 2015-06-20T00:17:56.360 に答える
0

これも以下のようにうまく機能します。

 if (element.Resources.ContainsKey(key))
            return element.Resources[key];
        else
        {
            if (element.Parent != null && element.Parent is FrameworkElement)
                return ((FrameworkElement)element.Parent).TryFindResource(key);
            else
            {
                if (Application.Current.Resources.ContainsKey(key))
                    return Application.Current.Resources[key];
            }
        }

要素にそのキーがない場合、親要素を検索します

于 2015-06-20T05:12:23.860 に答える