在WPF中,我们可以根据目标类型获取样式,如下所示:
control.Style = (Style)toplevelcontrol.TryFindResource(typeof(control))
但是在WinRT中,我无法做到这一点。我只能使用密钥来获取资源。是否有可能根据目标类型获取资源? 请帮我解决这个问题。
提前致谢
答案 0 :(得分:1)
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
。我已修复上述示例调用中的错误)
答案 1 :(得分: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];
}
}
如果元素没有该键,则在其父元素中搜索