当没有满足数据触发器的值时设置属性 WPF。

7

我对WPF和C#非常陌生,因此可能有更好的方法来完成我的尝试。因此,我接受其他方法。

就我所拥有的而言,我正在尝试为我工作的维护部门编写数字VMB(可视化管理板)。他们想要一个显示我们工厂没有事故的天数的部分:“安全天数”。我已经成功设置了这个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时,前景色“默认”为绿色。目前,任何大于5的值都是黑色的,但我希望它是绿色的。我尝试在第一个TextBlock部分中添加foreground="green"属性,但这会覆盖DataTriggers,前景色始终为绿色。

请问如何设置前景色的默认值? 谢谢。


只需将 <Setter Property="Foreground" Value="Green" /> 添加到样式本身即可。 - icebat
1个回答

18

你可以添加一个设置器,将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>

1
非常感谢!这是一个非常简单的修复,但我似乎找不到任何涵盖此内容的信息。已点赞,但由于我是新手,我猜在我的声望超过15之前它不会显示出来。祝你有美好的一天! - Caleb W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接