2

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

4

1 回答 1

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> 

我是这样做的:

样式样式=新样式();

如果(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得到它。它使我能够组合多个视觉状态组的效果。

于 2009-12-09T06:54:45.527 回答