如果我有以下代码:
Style defaultStyle = (Style)FindResource("MyTestStyle");
有没有办法获得样式的名称(即反向查找)?类似的东西:
string name = defaultStyle.SomeMagicLookUpFunction()
名称将评估为“MyTestStyle。”
这可能吗?
答案 0 :(得分:12)
我用一种方法创建了一个小助手类来进行你需要的反向查找。
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的定义位置正确。如果需要,您可以向静态类添加更多方法,以递归方式遍历窗口中的所有字典(应用程序?)
答案 1 :(得分: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;
}
答案 2 :(得分:1)
在不搜索资源字典的情况下,我认为这不可能,因为x:Key是XAML标记语法的一部分,并且在您引用Style或DataTemplate或您检索的任何内容时没有相关性。
查看x:Key
上的MSDN文档答案 3 :(得分:1)
可能没有使用Style对象,但是如果你在ResourceDictionary containing your style中徘徊,你可以获得x:Key。
答案 4 :(得分:0)
IF语句需要比较字符串,如下所示
{{1}}