Как использовать Style.Triggers в Silverlight 4.0? - PullRequest
6 голосов
/ 28 апреля 2011

Перейдя с WPF на Silverlight 4.0, я застрял в чем-то довольно простом.Кажется, я никак не мог использовать триггер в своих стилях.Как это будет работать?

например, здесь я создал стиль DataGrid ColumnHeader в моем ResourceDictionary:

<Style x:Key="DataGridColumnHeaderStyle" TargetType="sdk:DataGridColumnHeader"  >
        <Setter Property="Background" Value="#88800080" />
        <Setter Property="Foreground" Value="White" />
        <Style.Triggers>
            <Trigger Property="SortDirection" Value="{x:Null}">
                <Setter Property="Background" Value="{DynamicResource DataGridHeaderBackgroundBrush}" />
                <Setter Property="BorderBrush"  Value="Transparent" />
            </Trigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True" />
                    <Condition Property="SortDirection" Value="{x:Null}" />
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="{StaticResource DataGridHeaderMouseOverBackgroundBrush}" />
                <Setter Property="BorderBrush" Value="{StaticResource DataGridHeaderBorderBrush}" />
            </MultiTrigger>
...

Некоторые попытки поиска в Google с начала 2009 года утверждают, что вместо них используются конвертеры, но яполностью застрял с этим.Буду очень признателен, если кто-нибудь подскажет, как это сделать.

1 Ответ

8 голосов
/ 28 апреля 2011

Expression Blend добавил некоторую поддержку для триггеров типа WPF в Silverlight.Это сообщение в блоге объясняет это более подробно.

Но, короче говоря, вы не получаете тот же приоритет значения с этими триггерами, как с WPF.Это означает, что триггер Style может переопределить настройку, заданную явно для элемента.

Silverlight использует концепцию VisualStateManager для «темы» или настройки внешнего вида элемента управления.Это фактически заставляет вас определять «фиксированные» состояния, такие как Hover (то есть IsMouseOver = true) или Pressed.Затем вы можете применять анимацию при входе или выходе из этих состояний.Таким образом, вы можете сказать, что анимируйте кисть фона при наведении курсора, чтобы придать ей вид.

Подход VisualStateManager значительно упрощает предоставление инструментов для настройки внешнего вида элемента управления.Это более подробно показано в этом блоге .

Короче говоря, вы не сможете перевести его один-к-одному.Вы найдете много таких вещей.Например, в UIElement отсутствует свойство IsMouseOver, как в WPF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...