我有一个分配给按钮的模板:
<Button x:Name="btn_PatMat" Template="{StaticResource PatMat_Button}" ...
如何Key/String/Name
从所述按钮中检索此模板的?
伪代码:
String = btn_PatMat.Template.???.ToString()
你不能。至少不是你尝试的方式。
引用这篇关于 x:Key 的 SO 帖子(强调我的):
x:Key
用于作为值添加到字典中的项目,通常用于添加到 ResourceDictionary 的样式和其他资源。设置 x:Key 属性时,对象上实际上没有相应的属性,甚至没有设置附加的依赖属性。XAML 处理器仅使用它来了解调用 Dictionary.Add 时要使用的键。
StaticResources
在加载过程中进行评估,因此一旦控件加载,该Template
属性就不再设置为绑定,而是设置为ControlTemplate
来自资源的副本,并且该对象上没有相应的属性设置为键。
您可以通过在加载按钮后检查按钮的 XAML 来验证这一点,方法是使用XamlWriter.Save之类的东西来查看它的 XAML 字符串。
我能想到的唯一可行的解决方案是遍历您的.Resources
,并找到一个ControlTemplate
等于您的 Button 的ControlTemplate
. 我没有对此进行测试,它对于大型资源库可能不是很实用,但它可能是一种选择。
但是更好的解决方案可能是更改您的逻辑,以便可以通过任何对象需要的其他方式访问键值。
好吧,恐怕这是不可能的,因为它不是 WPF 的意图。有些人想要访问x:Name
类似于x:Key
,他们都不得不放弃。
我能想象的唯一解决方法是从ResourceDictionary读取所有模板,实例化每个资源(如果可能),找到模板(如果它是例如样式)并将其与控件中找到的模板的当前实例进行比较。但这似乎是一个非常丑陋的解决方案,我不确定它是否会毫无问题地工作。