我在Window.Resources上有几个样式,我用C#应用于几个按钮。然后我需要改变样式,但首先我需要知道应用于我想要改变样式的按钮的当前样式是什么。 我无法找到从按钮获取样式名称的方法!
答案 0 :(得分:1)
您是否尝试过Button.Style
财产?如果使用资源Key
完成样式的explcit设置,那么您应该使用Button.Style
propetry获取按钮的当前样式,否则在控件上收集所有Style
相关信息有点棘手水平。
这是有原因的。样式是继承的,可以在不同的元素范围覆盖,例如App,Window,UserControl,Ancestor UIElements,最后是单独的控件。因此,当您访问Button.Style
属性时,您会获得一种样式,该样式是应用于Button
的最后一种直接样式。如果样式为BasedOn
另一个Style
,则Style.BasedOn
会为您提供父/基Style
。如果BasedOn
样式来自另一个Style
,我们将再次将其作为Style.basedOn.BasedOn
...等等。
我希望这是有道理的。 :-)
答案 1 :(得分:1)
如果您以这种方式处理问题,我认为您在设计/架构方面犯了一个错误。如果您需要有条件地更改样式,可以使用data-binding和templating基于保存相关信息的对象创建UI元素。
答案 2 :(得分:0)
这是一个很好的问题(+1)。
这只是我的想法,可能不是很准确。我怀疑获得UI控件的样式是否有意义。假设您将样式“style1”应用于UI控件,然后您可以设置各个属性,如前景/背景....现在,样式是什么?
如果你想维护/跟踪按钮的状态,那么应该以可视状态或后面的代码(ViewModel / Model)来处理。
答案 3 :(得分:0)
请参阅:Style
public void FooFunc()
{
Button myButton = ...;
Console.WriteLine("The Style: {0}", myButton.Style);
}
我认为这就是你要找的东西?
答案 4 :(得分:0)
感谢您的回答,我正在使用另一个stackoverflow中的此函数..它可以工作并将样式名称返回到字符串中!
static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem)
static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem)
{
foreach (object key in dictionary.Keys)
{
if (dictionary[key] == resourceItem)
{
return key.ToString();
}
}
return null;
}
答案 5 :(得分:0)
@Max, 我是WPF的新手,必须在其可以具有的两种已知样式之一之间切换我的Border对象的样式。与其在FindNameFromResource中使用线性搜索,不如说是...
Style normal = (Style)this.Resources["NormalBorder"];
Style strong = (Style)this.Resources["StrongBorder"];
border.Style = border.Style == normal ? strong : normal;