Можно ли получить ресурс на основе целевого типа на платформе WinRT?
В WPF мы можем получить стиль на основе целевого типа, как показано ниже:
control.Style = (Style)toplevelcontrol.TryFindResource(typeof(control))
Но в WinRT я не могу этого сделать. Я могу использовать только ключ, чтобы получить ресурс. Можно ли получить ресурс на основе целевого типа? Пожалуйста, помогите мне решить эту проблему.
заранее спасибо
2 ответа
Основное различие между 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];
}
}
если элемент не имеет этого ключа, он ищет в родительском элементе