#silverlight #silverlight-4.0
#silverlight #silverlight-4.0
Вопрос:
Переключившись с WPF на Silverlight 4.0, я застрял на чем-то довольно простом. Кажется, я не мог бы использовать триггер в своих стилях. Как это будет работать?
например, здесь я создал стиль заголовка столбца DataGrid в моем 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:
Expression Blend добавил некоторую поддержку триггеров типа WPF в Silverlight. Этот пост в блоге объясняет это подробнее.
Но, короче говоря, вы не получаете тот же приоритет значений с этими триггерами, что и с WPF. Это означает, что триггер стиля может переопределять настройку, явно заданную для элемента.
Silverlight использует концепцию VisualStateManager для «оформления» или настройки внешнего вида элемента управления. Это эффективно заставляет вас определять «фиксированные» состояния, такие как наведение курсора мыши (т. Е. IsMouseOver = true) или нажатие. Затем вы можете применять анимацию при входе в эти состояния или выходе из них. Так что, можно сказать, анимируйте фоновую кисть при наведении курсора мыши, чтобы придать ей наведенный вид.
Подход VisualStateManager значительно упрощает предоставление инструментов для настройки внешнего вида элемента управления. Это показано более подробно в этом сообщении в блоге.
Короче говоря, вы не сможете перевести это один к одному. Вы обнаружите, что существует много подобных вещей. Например, в UIElement нет свойства IsMouseOver, как в WPF.
Комментарии:
1. @Kave — В принципе, да 🙂 По первой ссылке показаны некоторые обходные пути для простых вещей, но в целом VSM не так интересен, как триггеры.
2. Вау, это безумие. Триггеры являются огромной частью WPF. Не могу представить себя без них 🙂 Но у меня нет выбора, кроме как использовать