Стилизация визуальных состояний

Я использую VisualStateManager из набора инструментов WPF. Я создал настраиваемый элемент управления, часть библиотеки многократно используемых элементов управления, с многочисленными визуальными состояниями. Теперь я хочу позволить клиенту моей библиотеки легко изменять шрифты и цвета этих визуальных состояний. Каков стандартный способ сделать это? Должен ли я требовать от клиента замены всего шаблона элемента управления и замены всех визуальных состояний, даже если они заинтересованы в изменении только одного? Или есть лучший способ... например, как заставить GoToState откладываться на предоставленный клиентом триггер, предназначенный для переопределения шрифта и цвета визуального состояния по умолчанию? Другие идеи?


person Community    schedule 08.12.2009    source источник


Ответы (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> 

Вот как я это сделал:

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< /а> . Это позволяет мне комбинировать эффекты нескольких групп визуальных состояний.

person Community    schedule 09.12.2009