在没有DataTrigger值满足时设置属性WPF

时间:2017-01-20 15:08:34

标签: c# wpf binding styles datatrigger

我对WPF和C#非常陌生,因此可能有更好的方法来完成我正在尝试的内容。因此,我对其他方法持开放态度。

就我所获得的而言,我正在尝试为我工作的维护部门编写数字VMB(可视化管理板)。他们想要一个部分显示我们的工厂没有发生意外的天数:" Days Safe"。我成功地为此TextBlock设置了绑定集:

def average_rating(self):
    if self.users.count() == 0:
        return 0.0
    rates = 0
    rating_list = [user_rating.rating for user_rating in self.userrating_set.all()]
    for r in rating_list:
        rates = r + rates
    return rates / self.users.count()

我有一系列DataTriggers,可根据文本的值将文本的前景颜色更改为某种颜色。基本上,我希望DaysSafe文本是: 0时为红色 等于1时为橙色(您可以在下面的代码中看到颜色):

<TextBlock Text="{Binding DaysSafe}" FontSize="60"  FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" >

此功能正常,颜色在日期较低时会发生变化。但是,我希望前景色为&#34;默认&#34;当DaysSafe的值超过5时变为绿色。现在,当我希望它为绿色时,任何大于5的值都是黑色。我尝试添加前景=&#34;绿色&#34;第一个TextBlock部分中的属性,但这会覆盖DataTriggers,前景始终为绿色。

有关如何为前景创建默认值的任何帮助? 感谢。

1 个答案:

答案 0 :(得分:9)

您可以添加一个setter,将TextBlock的默认前景设置为绿色:

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="Green" />
    <Style.Triggers >
        <DataTrigger Binding="{Binding DaysSafe}" Value="0">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding DaysSafe}" Value="1">
            <Setter Property="Foreground" Value="OrangeRed" />
        </DataTrigger>
        <DataTrigger Binding="{Binding DaysSafe}" Value="2">
            <Setter Property="Foreground" Value="Orange" />
        </DataTrigger>
        <DataTrigger Binding="{Binding DaysSafe}" Value="3">
            <Setter Property="Foreground" Value="Yellow" />
        </DataTrigger>
        <DataTrigger Binding="{Binding DaysSafe}" Value="4">
            <Setter Property="Foreground" Value="Yellow" />
        </DataTrigger>
        <DataTrigger Binding="{Binding DaysSafe}" Value="5">
            <Setter Property="Foreground" Value="GreenYellow" />
        </DataTrigger>
    </Style.Triggers>
</Style>