2

WPF Toolkit の VisualStateManager を使用しています。再利用可能なコントロール ライブラリの一部であり、多数の視覚状態を持つカスタム コントロールを作成しました。ここで、ライブラリのクライアントがこれらの視覚状態のフォントと色を簡単に変更できるようにしたいと考えています。これを行う標準的な方法は何ですか?クライアントが1 つだけを変更することに関心がある場合でも、コントロール テンプレート全体を置き換え、すべての表示状態を置き換えるようクライアントに要求する必要がありますか? または、より良い方法があります...視覚状態のデフォルトのフォントと色をオーバーライドすることを目的としたクライアント提供のトリガーに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> 

これが私がやった方法です:

スタイル スタイル = 新しいスタイル();

if ( MyState == MyState.State1Normal )
    VisualStates.GoToState( this, useTransitions, State1Normal );
それ以外の場合 (MyState == MyState.State2) {
    if ( Owner.State2Style != null )
        スタイル = style.Merge( Owner.State2Style );
    そうしないと
        VisualStates.GoToState( this, useTransitions, State2 );
} それ以外の場合 (MyState == MyState.State3) {
    if ( Owner.State3Style != null )
        スタイル = style.Merge( Owner.State3Style );
    そうしないと
        VisualStates.GoToState( this, useTransitions, State3 );
}

スタイル = スタイル;

Style.Merge 拡張メソッドに注目してください。http://bea.stollnitz.com/blog/?p=384から入手しました。複数の視覚状態グループの効果を組み合わせることができます。

于 2009-12-09T06:54:45.527 に答える