Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:根据属性值为文本框的列表框中的文本添加颜色_C#_Wpf - Fatal编程技术网

C# WPF:根据属性值为文本框的列表框中的文本添加颜色

C# WPF:根据属性值为文本框的列表框中的文本添加颜色,c#,wpf,C#,Wpf,相对新的WPF 我有以下XAML/代码,它将在所述类的ObservableCollection中显示ItemName(类的属性)。我想做的是,如果IsAvailable值为false,则为文本添加不同的颜色,如果IsAvailable值为true,则为黑色。如何设置检查和修改颜色 数据类: public class PIProductionData : INotifyPropertyChanged { private string itemName; private bo

相对新的WPF

我有以下XAML/代码,它将在所述类的ObservableCollection中显示ItemName(类的属性)。我想做的是,如果IsAvailable值为false,则为文本添加不同的颜色,如果IsAvailable值为true,则为黑色。如何设置检查和修改颜色

数据类:

    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>

...