是否可以根据 WinRT 平台中的目标类型获取资源

本文关键字:目标 类型 获取 资源 平台 WinRT 是否 | 更新日期: 2023-09-27 17:57:24

在WPF中,我们可以根据目标类型获取样式,如下所示:

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

但在 WinRT 中,我不能这样做。我只能使用密钥来获取资源。是否可以根据目标类型获取资源?请帮助我解决这个问题。

提前致谢

是否可以根据 WinRT 平台中的目标类型获取资源

WPF 和 Winrt

在处理资源方面的主要区别在于,您可以在 WPF 对象中获取FindResource()和同级,而在 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];
            }
        }

如果元素没有该键,它会在其父元素中搜索