在WPF中我們可以能夠根據目標類型,以獲得形式,類似下面:是否有可能基於WinRT的在目標平臺型拿到資源
control.Style = (Style)toplevelcontrol.TryFindResource(typeof(control))
但在WinRT中我不能這樣做。我只能使用密鑰來獲取資源。是否有可能獲得基於目標類型的資源? 請幫我解決這個問題。
在此先感謝
在WPF中我們可以能夠根據目標類型,以獲得形式,類似下面:是否有可能基於WinRT的在目標平臺型拿到資源
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];
}
}
如果元素不具備此鍵,在它的父元素
感謝搜索你的努力。 – SharpGobi