首页 文章

如何在Silverlight 4.0中使用Style.Triggers?

提问于
浏览
6

从WPF切换到Silverlight 4.0后,我陷入了一些非常基本的问题 . 似乎我无法在我的风格中使用Trigger . 这会怎么样?

例如这里我在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年初开始的一些谷歌搜索尝试声称使用转换器,但我完全坚持这一点 . 如果有人能给我一些如何做的提示,我真的很感激 .

1 回答

  • 8

    Expression Blend为WPF类型触发器添加了一些支持Silverlight . 这blog post更多地解释了这一点 .

    但简而言之,您不会像使用WPF那样获得与这些触发器相同的值优先级 . 意思是,Style触发器可以覆盖在元素上显式设置 .

    Silverlight使用VisualStateManager概念来"theme"或自定义控件的外观 . 它有效地强制您定义"fixed"状态,例如Hover(即IsMouseOver = true)或Pressed . 然后,您可以在进入或退出这些状态时应用动画 . 因此,您可以说,在悬停时为背景画笔设置动画以呈现悬停的外观 .

    VisualStateManager方法使得围绕自定义控件外观提供工具变得更加容易 . 这在blog post中有更详细的显示 .

    简而言之,您将无法一对一地翻译它 . 你会发现有很多这样的事情 . 例如,UIElement上没有与WPF中一样的IsMouseOver属性 .

相关问题