获取按钮样式名称

本文关键字:样式 按钮 获取 | 更新日期: 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;