2015-06-19 32 views
3

在WPF中我們可以能夠根據目標類型,以獲得形式,類似下面:是否有可能基於WinRT的在目標平臺型拿到資源

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

但在WinRT中我不能這樣做。我只能使用密鑰來獲取資源。是否有可能獲得基於目標類型的資源? 請幫我解決這個問題。

在此先感謝

回答

1

與資源在這裏處理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。我已經修復了上面示例調用中的錯誤)。

+0

感謝搜索你的努力。 – SharpGobi

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]; 
      } 
     } 

如果元素不具備此鍵,在它的父元素

相關問題