C# WPF:根据属性值为文本框的列表框中的文本添加颜色
相对新的WPF 我有以下XAML/代码,它将在所述类的ObservableCollection中显示ItemName(类的属性)。我想做的是,如果IsAvailable值为false,则为文本添加不同的颜色,如果IsAvailable值为true,则为黑色。如何设置检查和修改颜色 数据类:C# WPF:根据属性值为文本框的列表框中的文本添加颜色,c#,wpf,C#,Wpf,相对新的WPF 我有以下XAML/代码,它将在所述类的ObservableCollection中显示ItemName(类的属性)。我想做的是,如果IsAvailable值为false,则为文本添加不同的颜色,如果IsAvailable值为true,则为黑色。如何设置检查和修改颜色 数据类: public class PIProductionData : INotifyPropertyChanged { private string itemName; private bo
public class PIProductionData : INotifyPropertyChanged
{
private string itemName;
private bool isAvailable;
public event PropertyChangedEventHandler PropertyChanged;
public string ItemName
{
get => this.itemName;
set
{
this.itemName = value;
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ItemName"));
}
}
public bool IsAvailable
{
get => this.isAvailable;
set
{
this.isAvailable = value;
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsAvailable"));
}
}
}
收集类别:
public class PIProducts : INotifyPropertyChanged
{
public const int RawIndex = 0;
public const int Tier1Index = 1;
public const int Tier2Index = 2;
public const int Tier3Index = 3;
public const int Tier4Index = 4;
private List<ObservableCollection<PIProductionData>> items;
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<PIProductionData> Raw
{
get => this.items[0];
set
{
this.items[0] = value;
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Raw"));
}
}
public ObservableCollection<PIProductionData> Tier1
{
get => this.items[1];
set
{
this.items[1] = value;
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Tier1"));
}
}
公共类PIProducts:INotifyPropertyChanged
{
public const int RawIndex=0;
公共常数int Tier1Index=1;
公共常数int Tier2Index=2;
public const int Tier3Index=3;
公共const int Tier4Index=4;
私人清单项目;
公共事件属性更改事件处理程序属性更改;
公共可观测采集原始数据
{
get=>this.items[0];
设置
{
此.项[0]=值;
this.PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(“原始”));
}
}
公共可观测收集第1层
{
get=>this.items[1];
设置
{
此项。项[1]=值;
this.PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(“第1层”);
}
}
XAML:
文本框样式可能包含数据触发器:
<Style TargetType="TextBox" x:Key="ListBoxItemStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
除此之外,文本框应该是一个文本块,因为您不想编辑文本
<Style TargetType="TextBlock" x:Key="ListBoxItemStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
...
<DataTemplate>
<TextBlock Text="{Binding ItemName}" Style="{StaticResource ListBoxItemStyle}"/>
</DataTemplate>
...
文本框样式可能包含数据触发器:
<Style TargetType="TextBox" x:Key="ListBoxItemStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
除此之外,文本框应该是一个文本块,因为您不想编辑文本
<Style TargetType="TextBlock" x:Key="ListBoxItemStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
...
<DataTemplate>
<TextBlock Text="{Binding ItemName}" Style="{StaticResource ListBoxItemStyle}"/>
</DataTemplate>
...