如果我有以下代碼:我可以在代碼隱藏中獲得風格的關鍵嗎? (WPF)
Style defaultStyle = (Style)FindResource("MyTestStyle");
有沒有辦法讓樣式的名稱(即反向查找)?例如:
string name = defaultStyle.SomeMagicLookUpFunction()
其中name將評估爲「MyTestStyle」。
這可能嗎?
如果我有以下代碼:我可以在代碼隱藏中獲得風格的關鍵嗎? (WPF)
Style defaultStyle = (Style)FindResource("MyTestStyle");
有沒有辦法讓樣式的名稱(即反向查找)?例如:
string name = defaultStyle.SomeMagicLookUpFunction()
其中name將評估爲「MyTestStyle」。
這可能嗎?
我用一種方法創建了一個小的幫助類來執行所需的反向查找。
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被定義在正確的地方。如果需要,你可以添加更多的方法到靜態類遞歸遍歷窗口中的所有字典(應用程序?)
沒有搜索資源字典,我不認爲這是可能爲x:關鍵是XAML標記語法的一部分,並沒有相關性,當你有一個樣式或DataTemplate中或者檢索完任何一個參考。
看一看在MSDN文檔上x:Key
大概不會使用Style對象,但如果你走在ResourceDictionary containing your style絆倒周圍,你可以看一下X:關鍵。
我不得不稍微改變上面的例子來讓它爲我工作,因爲我使用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;
}
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;
}
或只是有它的一些FrameworkElement的開始,並通過可視化的工作廣度優先樹。 – user7116 2009-02-12 00:24:17