Можно ли получить ресурс на основе целевого типа на платформе 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];
            }
        }

если элемент не имеет этого ключа, он ищет в родительском элементе

Другие вопросы по тегам