当没有满足任何 DataTrigger 值时设置 属性 WPF

Setting Property when No DataTrigger Values are Satisfied WPF

我对 WPF 和 C# 还很陌生,所以可能有更好的方法来完成我正在尝试的事情。因此,我对其他方法持开放态度。

据我所知,我正在尝试为我工作的维护部门编写数字 VMB(可视化管理板)。他们想要一个部分来显示我们的工厂没有发生事故的天数:"Days Safe"。我成功地为这个 TextBlock 设置了绑定:

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

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

<StackPanel VerticalAlignment="Center" >
            <TextBlock Text="{Binding DaysSafe}" FontSize="60"  FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" >
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <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>
                </TextBlock.Style>
            </TextBlock>
        </StackPanel>

这个功能正常,颜色会在白天变短时改变。但是,当 DaysSafe 的值超过 5 时,我希望前景色 "Default" 变为绿色。现在,当我希望它为绿色时,任何高于 5 的值都是黑色。我尝试在第一个 TextBlock 部分中添加 foreground="green" 属性,但这会覆盖 DataTriggers 并且前景始终为绿色。

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

您可以添加一个 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>