C# WPF 数据触发器
Posted
技术标签:
【中文标题】C# WPF 数据触发器【英文标题】:C# WPF DataTrigger 【发布时间】:2021-12-20 10:01:07 【问题描述】:我想为每个灌装机制作状态指示器。当灌装机处于停止模式时,它会将颜色变为红色,但当灌装机运行时,它会变为绿色。 对于每一行,我们有两个填充物,所以我尝试使用 datatrigger 进行设置,但现在不知道如何为两个边框编程 trigger/s,因为它们使用相同的属性。
Fillers are in stop mode Filler 1 is running.
<DataTrigger Binding="Binding LineStatus" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="Binding LineStatus2" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
边框代码
<StackPanel Orientation="Horizontal" >
<Border
BorderBrush="TemplateBinding BorderBrush"
BorderThickness="4"
CornerRadius="5,0,0,5"
Width="40"
/>
<Border
BorderBrush="TemplateBinding BorderBrush"
BorderThickness="4"
CornerRadius="0,5,5,0"
Width="40"
/>
</StackPanel>
【问题讨论】:
你说他们使用相同的属性。但是您的代码显示您使用了两个差异。属性 LineStatus 和 LineStatus2。我在这里错过了什么吗? 有了属性,我在想这个 - Property="BorderBrush" 【参考方案1】:我认为这就是您想要实现的目标。
<StackPanel Orientation="Horizontal">
<Border BorderThickness="4"
CornerRadius="5 0 0 5"
Width="40">
<Border.Style>
<Style TargetType="Border">
<!-- "Put your default color here." -->
<Setter Property="BorderBrush" Value="Orange" />
<Style.Triggers>
<DataTrigger Binding="Binding LineStatus,
UpdateSourceTrigger=PropertyChanged,
FallbackValue='False'"
Value="True">
<!-- "Color to change to when LineStatus = True ." -->
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<Border BorderThickness="4"
CornerRadius="5 0 0 5"
Width="40">
<Border.Style>
<Style TargetType="Border">
<!-- "Put your default color here" -->
<Setter Property="BorderBrush" Value="Orange" />
<Style.Triggers>
<DataTrigger Binding="Binging LineStatus1,
UpdateSourceTrigger=PropertyChanged,
FallbackValue='False'"
Value="True">
<!-- "Color to change to when LineStatus1 = True ." -->
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</StackPanel>
当 LineStatus 和 LineStatus1 的值发生变化时,后面的代码需要实现 INotifyPropertyChanged 来更新 UI。
public partial class MainWindow : Window, INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyname = null)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
private bool _lineStatus = false;
public bool LineStatus
get return _lineStatus;
set
_lineStatus = value;
OnPropertyChanged();
private bool _lineStatus1 = false;
public bool LineStatus1
get return _lineStatus1;
set
_lineStatus1 = value;
OnPropertyChanged();
public MainWindow()
InitializeComponent();
LineStatus = false;
LineStatus1 = true;
【讨论】:
谢谢你拯救了我的一天!奇迹般有效。如果有人想使用它,那只是代码中的小错误。 - '以上是关于C# WPF 数据触发器的主要内容,如果未能解决你的问题,请参考以下文章
C# WPF 数据绑定DataContext;Window_Loaded时进行过数据绑定,指定DataContext;触发另一事件?
c# wpf grid - SelectedCellsChanged 不会为同一行中的单元格触发