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

在Silverlight中运行时更改按钮样式,silverlight,Silverlight,我有一个银色的按钮。我需要在运行时更改它的样式。在应用程序的生命周期内,此按钮的样式需要多次更改。这在Silverlight中可能吗?如果不是,什么是好的解决方法 谢谢大家! 考虑根据需要使用更改按钮的状态 您可以为希望显示的每个不同样式创建自己的状态。是的,这是可能的,但我会仔细考虑通过更改样式本身,您到底想做什么,因为可能有一种更简单的方法。您可能已经遇到了这样一个事实,即不能简单地使用类似于MyButton.style=(style)FindName(“NewButtonStyle”)的内

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

谢谢大家!

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


您可以为希望显示的每个不同样式创建自己的状态。

是的,这是可能的,但我会仔细考虑通过更改样式本身,您到底想做什么,因为可能有一种更简单的方法。您可能已经遇到了这样一个事实,即不能简单地使用类似于
MyButton.style=(style)FindName(“NewButtonStyle”)
的内容为按钮指定新样式。所以你确实需要一些替代品

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

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

介于两者之间的某个地方(我之所以提到这一点,是因为它是可能的,而不是因为我推荐它)将实际操作样式定义本身。按钮将拾取更改并自行调整。不过,我要在这里重复一下:我不建议这样做,我也不能设想这样一种情况,即我更喜欢使用VSM或完全使用按钮以外的其他东西。但是你可以进入
Application.Current.Resources[“Style”]作为Style
,随心所欲。那么,更大的问题是,为什么以及您正在做的事情是否可以通过其他方式来完成,这对以后维护您的代码的人来说更有意义。就个人而言,我认为风格应该是相当静态的,我认为这也是普遍的共识。

当然可以

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

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