WPF では、以下のように、ターゲット タイプに基づいてスタイルを取得できます。
control.Style = (Style)toplevelcontrol.TryFindResource(typeof(control))
しかし、WinRT ではそれができません。リソースを取得するにはキーしか使用できません。ターゲット タイプに基づいてリソースを取得することは可能ですか? これを解決するのを手伝ってください。
前もって感謝します
WPF では、以下のように、ターゲット タイプに基づいてスタイルを取得できます。
control.Style = (Style)toplevelcontrol.TryFindResource(typeof(control))
しかし、WinRT ではそれができません。リソースを取得するにはキーしか使用できません。ターゲット タイプに基づいてリソースを取得することは可能ですか? これを解決するのを手伝ってください。
前もって感謝します
ここでリソースを処理するための 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
。上記の例の呼び出しのバグを修正しました)。
これも以下のようにうまく機能します。
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];
}
}
要素にそのキーがない場合、親要素を検索します