获取按钮样式名称

时间:2011-09-15 02:38:58

标签: c# wpf button styles

我在Window.Resources上有几个样式,我用C#应用于几个按钮。然后我需要改变样式,但首先我需要知道应用于我想要改变样式的按钮的当前样式是什么。 我无法找到从按钮获取样式名称的方法!

6 个答案:

答案 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-bindingtemplating基于保存相关信息的对象创建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;