我们有一个应用程序,其中默认的控件样式定义为隐式样式。
XAML:<Style TargetType="Button">
[...]
</Style>
这些样式现在应用于应用程序中的每个按钮。
有时我们会改变代码隐藏的样式。
XAML:<Style x:Key="HighlightStyle" TargetType="Button">
[...]
</Style>
代码:cmdButton.Style = App.Current.Resources("HighlightStyle")
然后我们再次想要删除样式并返回到隐式样式,但这似乎是不可能的:
代码:cmdButton.Style = Nothing
结果为未样式的Button
。
我也在这里读到http://www.silverlightshow.net/items/Implicit-Styles-in-Silverlight-4.aspx所有隐式样式都应该通过targetttype - value作为Key来访问,但这似乎也不起作用。
有人知道解决这个问题的方法吗?
像往常一样,一旦我发布了这个问题,我就想出了一个解决方案:
在对象上使用ClearValue方法清除style属性,使其保持默认样式。
cmdButton.ClearValue(FrameworkElement.StyleProperty)
如何-将默认的Style
添加Key
,而不是cmdButton.Style = Nothing;
添加cmdButton.Style = App.Current.Resources("DefaultButtonStyle");
。
如果你不喜欢这个解决方案,你可以阅读几篇关于VisualStateManager
的文章。但是为了实现它,你应该重写一点你的逻辑。