从WPF切换到Silverlight 4.0后,我陷入了一些非常基本的问题。似乎我无法在我的风格中使用Trigger。这会怎么样?
e.g。这里我在ResourceDictionary中创建了一个DataGrid ColumnHeader样式:
<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>
...
2009年初的一些谷歌搜索尝试声称使用转换器,但我完全坚持这一点。如果有人能给我一些如何做的提示,我真的很感激。
答案 0 :(得分:8)
Expression Blend为WPF类型触发器添加了一些支持Silverlight。这个blog post更多地解释了这一点。
但简而言之,您不会像使用WPF那样获得与这些触发器相同的值优先级。意思是,Style触发器可以覆盖在元素上显式设置。
Silverlight使用VisualStateManager概念来“主题化”或自定义控件的外观。它有效地迫使您定义“固定”状态,例如Hover(即IsMouseOver = true)或Pressed。然后,您可以在进入或退出这些状态时应用动画。因此,您可以说,在悬停时为背景画笔设置动画以显示悬停的外观。
VisualStateManager方法可以更轻松地提供自定义控件外观的工具。这在blog post中有更详细的说明。
简而言之,您将无法一对一地翻译它。你会发现有很多这样的事情。例如,UIElement上没有与WPF中一样的IsMouseOver属性。