【问题标题】:C# WPF DataTriggerC# WPF 数据触发器
【发布时间】: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"

标签: c# wpf border datatrigger


【解决方案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;

    }
}

【讨论】:

  • 谢谢你拯救了我的一天!奇迹般有效。如果有人想使用它,那只是代码中的小错误。 - '
猜你喜欢
  • 2016-03-12
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多