2010-12-16 51 views
0

我在Silverlight中有一个按钮。我需要在运行时改变它的风格。这个Button的风格在应用程序的生命周期中需要多次更改。这在Silverlight中可能吗?如果不是,什么是一个好的解决方法?在Silverlight中运行时更改按钮样式

谢谢!

回答

1

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

您可以为您希望显示的每种不同风格创建自己的状态。

1

是的,这是可能的,但我想通过改变风格本身来努力尝试做什么,因为可能有一种更简单的方法。您可能已经遇到了这样一个事实,即您不能简单地使用MyButton.Style = (Style)FindName("NewButtonStyle")之类的按钮为按钮分配新样式。所以你确实需要某种选择。

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

如果您要查找的更改类型更广泛,则将控件类型更改为ContentControl,然后从此处捕获mousedown/mouseup事件可能是更好的解决方法。这显然是一个更大的交易(并且您失去了一个按钮的简单性),但只需更换Content属性即可轻松获得想要的任何更改。

这两者之间的某处(以及我会提到的,因为这是可能的,不是因为我推荐它)将实际操纵Style定义本身。按钮将会选择更改并自行调整。我将在此重复自己:我不建议这样做,我也不能设想一个场景,我宁愿使用VSM来完成此操作,或完全使用Button以外的其他方法。但是有可能进入Application.Current.Resources["Style"] as Style,并且随心所欲。那么更大的问题是,为什么以及您所做的是否可以通过其他方式来完成,这对于以后谁维护您的代码会更有意义。就我个人而言,我期望Styles是相当静态的,我认为这也是普遍的共识。

0

当然你可以....

,如果你有本地存储的风格,你可以像访问:

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