造型视觉状态

时间:2009-12-08 19:21:29

标签: wpf wpftoolkit visualstatemanager

我正在使用WPF Toolkit中的VisualStateManager。我创建了一个自定义控件,它是可重用控件库的一部分,具有多种可视状态。现在我想让我的库的客户端轻松地重新设置这些视觉状态的字体和颜色。这样做的标准方法是什么?我是否必须要求客户替换整个控件模板并替换所有视觉状态,即使他们只想修改一个?或者有更好的方法......比如我怎样才能使GoToState延迟到客户端提供的触发器,以触发视觉状态的默认字体和颜色?其他想法?

1 个答案:

答案 0 :(得分:0)

我为第一个我试过的案子工作了。目标是使这个代码产生影响:

  <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> 

我就这样做了:

Style style = new Style();

if ( MyState == MyState.State1Normal )
    VisualStates.GoToState( this, useTransitions, State1Normal );
else if ( MyState == MyState.State2 ) {
    if ( Owner.State2Style != null )
        style = style.Merge( Owner.State2Style );
    else
        VisualStates.GoToState( this, useTransitions, State2 );
} else if ( MyState == MyState.State3 ) {
    if ( Owner.State3Style != null )
        style = style.Merge( Owner.State3Style );
    else
        VisualStates.GoToState( this, useTransitions, State3 );
}

Style = style;

注意Style.Merge扩展方法。我是从http://bea.stollnitz.com/blog/?p=384得到的。它使我能够结合多个视觉状态组的效果。