Я использую VisualStateManager из набора инструментов WPF. Я создал настраиваемый элемент управления, часть библиотеки многократно используемых элементов управления, с многочисленными визуальными состояниями. Теперь я хочу позволить клиенту моей библиотеки легко изменять шрифты и цвета этих визуальных состояний. Каков стандартный способ сделать это? Должен ли я требовать от клиента замены всего шаблона элемента управления и замены всех визуальных состояний, даже если они заинтересованы в изменении только одного? Или есть лучший способ... например, как заставить GoToState откладываться на предоставленный клиентом триггер, предназначенный для переопределения шрифта и цвета визуального состояния по умолчанию? Другие идеи?
Стилизация визуальных состояний
Ответы (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