获取按钮样式名称
本文关键字:样式 按钮 获取 | 更新日期: 2023-09-27 18:08:32
我有几个窗口样式。我在c#中应用了几个按钮的资源。然后我需要更改样式,但首先我需要知道应用于我想更改样式的按钮的当前样式是什么。我找不到从按钮中获取样式名称的方法!
您是否尝试过Button.Style
属性?如果样式的显式设置是使用资源Key
完成的,那么你应该使用Button.Style
属性获得按钮的当前样式,否则在控制级别收集所有Style
相关信息有点棘手。
这是有原因的。样式可以被继承,并且可以在不同的元素范围内被重写,例如App, Window, UserControl, Ancestor UIElements和最后的单个控件。因此,当您访问Button.Style
属性时,您将获得应用于Button
的最后直接样式的样式。如果样式是BasedOn
,另一个Style
,那么Style.BasedOn
将给你父/基础Style
。再次,如果BasedOn
风格是从另一个Style
衍生的,我们将得到Style.basedOn.BasedOn
…等。
我希望这有意义。: -)
如果你以这种方式处理问题,我认为你在设计/架构方面犯了一个错误。如果你需要有条件地改变样式,你可以创建基于对象的ui元素,这些对象使用数据绑定和模板来保存相关信息。
问得好(+1)。
这只是我的想法,可能不太准确。我怀疑为UI控件获取样式是否有意义。假设您将样式"style1"应用于UI控件,然后您可以设置单个属性,如前景/背景....现在,是什么风格呢?
如果你想维护/跟踪按钮的状态,那应该处理要么作为视觉状态或在你的代码后面(ViewModel/Model)可能。
参见:Style
public void FooFunc()
{
Button myButton = ...;
Console.WriteLine("The Style: {0}", myButton.Style);
}
我想这就是你想要的?
谢谢你的回答,我从另一个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;
}
@Max;我是WPF的新手,不得不在边界对象的两种已知样式之间切换样式。我没有在FindNameFromResource中使用线性搜索,而是这样做了…
Style normal = (Style)this.Resources["NormalBorder"];
Style strong = (Style)this.Resources["StrongBorder"];
border.Style = border.Style == normal ? strong : normal;