在Windows Presentation Foundation中使用样式

时间:2009-09-28 11:07:38

标签: wpf styles

想象一下,我有一个数据绑定ListView和<ControlTemplate.Triggers>

我有以下

<DataTrigger Binding="{Binding Path=Status}" Value="Completed">
    <Setter Property="Background" Value="{StaticResource CompletedBackground}" />
    <Setter Property="Foreground" Value="Black" />
</DataTrigger>

我希望将其绑定到我的Grid.Resources中的样式,如下所示:

<Style x:Key="CompletedBackground" TargetType="ListViewItem">
    <Setter>
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFBCFAA6" Offset="0"/>
                <GradientStop Color="#FFA3E88B" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

然而,正如你可能想象的那样,这不起作用,令人惊讶的是,你不能将“Setter”绑定到“Background”,所以我的问题是,我该如何解决这个问题?

我仔细研究过以下内容,无法找到任何信息here

1 个答案:

答案 0 :(得分:2)

你要做的事情从根本上是有缺陷的。对于初学者,您的样式的setter不指定目标属性。据推测,目标属性应为Background

<Style x:Key="CompletedBackground" TargetType="ListViewItem">
    <Setter Property="Background">
        <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="#FFBCFAA6" Offset="0"/>
                        <GradientStop Color="#FFA3E88B" Offset="1"/>
                </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

其次,您正在尝试将Style实例分配给Background属性,该属性的类型为Brush,而不是Style

根据您要实现的目标,您应该只需将Style更改为Brush资源:

<LinearGradientBrush x:Key="CompletedBackground" EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FFBCFAA6" Offset="0"/>
    <GradientStop Color="#FFA3E88B" Offset="1"/>
</LinearGradientBrush>

然后以与现有相同的方式从触发器中使用它。