获取按钮样式名称

问题描述 投票:1回答:6

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

c# wpf button styles
6个回答
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
投票

如果您以这种方式解决问题,我认为您在设计/架构方面犯了一个错误。如果需要有条件地更改样式,可以使用data-bindingtemplating基于保存相关信息的对象创建UI元素。


0
投票

这是一个很好的问题(+1)。

这只是我的想法,可能不是很准确。我怀疑获得UI控件的样式是否有意义。假设您将样式“style1”应用于UI控件,然后您可以设置单个属性,如前景/背景......现在,样式是什么?

如果你想维护/跟踪按钮的状态,那么应该以可视状态或后面的代码(ViewModel / Model)来处理。


0
投票

见:Style

public void FooFunc()
{
    Button myButton = ...;

    Console.WriteLine("The Style: {0}", myButton.Style);
}

我想那就是你要找的东西?


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;
        }

0
投票

@Max,我是WPF的新手,不得不在我可以拥有的两种已知样式中的一种之间切换我的Border对象的样式。而不是在FindNameFromResource中使用线性搜索,而是改为做...

Style normal = (Style)this.Resources["NormalBorder"];
Style strong = (Style)this.Resources["StrongBorder"];
border.Style = border.Style == normal ? strong : normal;
© www.soinside.com 2019 - 2024. All rights reserved.