次のコードがある場合:
Style defaultStyle = (Style)FindResource("MyTestStyle");
スタイルの名前を取得する方法(つまり、逆ルックアップ)はありますか?何かのようなもの:
string name = defaultStyle.SomeMagicLookUpFunction()
名前が「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
辞書があり、「this」を使用すると、MyTestStyle が定義されている適切な場所にいると見なされます。必要に応じて、静的クラスにメソッドを追加して、ウィンドウ内のすべての辞書を再帰的に走査することができます (アプリケーション?)
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;
}
おそらくStyleオブジェクトを使用していませんが、スタイルを含むResourceDictionaryで困惑している場合は、x:Keyを取得できます。
x:Key は XAML マークアップ文法の一部であり、Style や DataTemplate、または取得したものへの参照がある場合は関係がないため、リソース ディクショナリを検索しないと、これは不可能だと思います。
x:Keyの MSDN ドキュメントを見てください。