当没有满足任何 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>
我对 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>