【问题标题】:Styling Visual States样式化视觉状态
【发布时间】:2009-12-08 19:21:29
【问题描述】:
我正在使用 WPF 工具包中的 VisualStateManager。我创建了一个自定义控件,它是可重用控件库的一部分,具有多种视觉状态。现在我想让我的库的客户端轻松地重新设置这些视觉状态的字体和颜色。这样做的标准方法是什么?我是否必须要求客户替换整个控件模板并替换所有视觉状态,即使他们只对修改一个感兴趣?或者有没有更好的方法......比如我如何让 GoToState 遵循客户端提供的触发器,该触发器旨在覆盖视觉状态的默认字体和颜色?其他想法?
【问题讨论】:
标签:
wpf
wpftoolkit
visualstatemanager
【解决方案1】:
在我尝试的第一个案例中,我得到了这个工作。目标是让这段代码产生效果:
<l:MyControl>
<l:MyControl.MyStateStyle>
<Style>
<Setter Property="Control.Background" Value="LightBlue"/>
<Setter Property="TextElement.Foreground" Value="White"/>
<Setter Property="TextElement.FontStyle" Value="Italic"/>
</Style>
</l:MyControl.MyStateStyle> </l:MyControl>
我就是这样做的:
样式样式=新样式();
如果(MyState == MyState.State1Normal)
VisualStates.GoToState(this, useTransitions, State1Normal);
否则 if ( MyState == MyState.State2 ) {
if ( Owner.State2Style != null )
style = style.Merge( Owner.State2Style );
别的
VisualStates.GoToState(this, useTransitions, State2);
} else if ( MyState == MyState.State3 ) {
if ( Owner.State3Style != null )
style = style.Merge( Owner.State3Style );
别的
VisualStates.GoToState(this, useTransitions, State3);
}
风格=风格;
注意 Style.Merge 扩展方法。我是从http://bea.stollnitz.com/blog/?p=384 那里得到的。它使我能够组合多个视觉状态组的效果。