在Silverlight中运行时更改按钮样式

时间:2010-12-16 15:55:05

标签: silverlight

我在Silverlight中有一个Button。我需要在运行时更改其样式。在应用程序的生命周期中,此Button的样式需要多次更改。这在Silverlight中是否可行?如果没有,什么是好的解决方法?

谢谢!

3 个答案:

答案 0 :(得分:1)

考虑使用VisualStateManager根据需要更改按钮的状态。

您可以为要显示的每种不同样式创建自己的状态。

答案 1 :(得分:1)

是的,这是可能的,但是我会通过改变风格本身来思考你究竟想做什么,因为这可能是一种更简单的方法。您可能已经遇到过这样一个事实,即您不能简单地使用类似MyButton.Style = (Style)FindName("NewButtonStyle")的按钮为按钮指定新样式。所以你确实需要某种替代方案。

VisualStateManager是处理您通常希望对控件执行的大多数更改的第一种也是最简单的方法。您可以非常轻松地设置在正常种类的可见状态(悬停,焦点,mousedown,mouseup)上发生的更改,并且它会正确地将这些状态更改从您处于的任何状态动态设置为您需要的任何其他状态。

如果您正在寻找的更改类型更广泛,将控件类型更改为ContentControl,然后从那里捕获mousedown / mouseup事件可能是一种更好的解决方法。这显然是一个更大的交易(并且你失去了按钮的简单性),但是你可以通过交换Content属性来轻松获得你想要的任何改变。

在两者之间的某个地方(我会提到的,因为它可能,而不是因为我推荐它)将实际操纵Style定义本身。按钮将拾取更改并自行调整。我将在这里重复一遍:我不推荐这个,我不能想象一个场景,我更喜欢这样做而不是使用VSM或完全使用除了Button之外的东西。但是有可能进入Application.Current.Resources["Style"] as Style并随心所欲地捣乱。那么更大的问题是为什么以及你正在做的事情是否可以通过其他方式来完成,这对于以后维护代码的人来说更有意义。就个人而言,我认为Styles非常静态,我认为这也是普遍的共识。

答案 2 :(得分:0)

当然可以......

如果您在本地存储了样式,则可以像这样访问它:

rec1.Style = (Style)this.Resources["style1"];