2009-02-11 57 views

回答

11

我用一種方法創建了一個小的幫助類來執行所需的反向查找。

public static class ResourceHelper 
{ 
    static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem) 
    { 
     foreach (object key in dictionary.Keys) 
     { 
      if (dictionary[key] == resourceItem) 
      { 
       return key.ToString(); 
      } 
     } 

     return null; 
    } 
} 

您可以使用稱它爲以下

string name = ResourceHelper.FindNameFromResource(this.Resources, defaultStyle); 

每個FrameworkElement有它自己的.Resources字典,用「這個」假設你在MyTestStyle被定義在正確的地方。如果需要,你可以添加更多的方法到靜態類遞歸遍歷窗口中的所有字典(應用程序?)

+0

或只是有它的一些FrameworkElement的開始,並通過可視化的工作廣度優先樹。 – user7116 2009-02-12 00:24:17

1

沒有搜索資源字典,我不認爲這是可能爲x:關鍵是XAML標記語法的一部分,並沒有相關性,當你有一個樣式或DataTemplate中或者檢索完任何一個參考。

看一看在MSDN文檔上x:Key

3

我不得不稍微改變上面的例子來讓它爲我工作,因爲我使用MergedDictionaries。如果上面的例子給你0結果,試試這個:

//Called by FindNameFromResource(aControl.Style) 
    static public string FindNameFromResource(object resourceItem) 
    { 

     foreach (ResourceDictionary dictionary in App.Current.Resources.MergedDictionaries) 
     { 
      foreach (object key in dictionary.Keys) 
      { 
       if (dictionary[key] == resourceItem) 
       { 
        return key.ToString(); 
       } 
      } 
     } 
     return null; 
    } 
0

IF語句需要字符串比較如下

public static class ResourceHelper 
    { 
     static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem) 
     { 
      foreach (object key in dictionary.Keys) 
      { 
       if (key.Equals(resourceItem)) 
       { 
        return key.ToString(); 
       } 
      } 

      return null; 
     } 
相關問題