wpf - 如何根据 Validation.HasError = False 运行 DataTrigger?

标签 wpf datagrid datatrigger

在我的DataGridTextColumn上,我想运行DataTrigger,但仅当Validation.HasErrorFalse

这就是我现在所拥有的:

<DataGridTextColumn Header="Volts" 
                Binding="{Binding DcVolts, Converter={StaticResource StringToDecimalConverter}}" 
                Width="Auto">
<DataGridTextColumn.ElementStyle>
    <Style TargetType="{x:Type TextBlock}" 
           BasedOn="{StaticResource DataGridTextColumnElementErrorStyle}">
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Validation.HasError}" 
                               Value="False" />
                    <Condition Value="False">
                        <Condition.Binding>
                            <MultiBinding Converter="{StaticResource EqualityConverter}">
                                <Binding Path="DcVolts" />
                                <Binding Path="DcSpecVolts" />
                            </MultiBinding>
                        </Condition.Binding>
                    </Condition>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="Background" Value="Orange" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
</DataGridTextColumn.ElementStyle>

背后的想法是,Validation.HasError 必须为 FalseMultiDataTrigger 才能设置 BackGround如果 EqualityConverter 的结果为 False

,则为 Orange

这是因为如果Validation.HasErrorTrue,那么我想要我的DataGridTextColumnElementErrorStyle通常的Pink背景当我在属性上设置的规则失败时提供。

我实际上更接近这个:

<DataGridTextColumn Header="Volts" 
                Binding="{Binding DcVolts, Converter={StaticResource StringToDecimalConverter}}" 
                Width="Auto">
<DataGridTextColumn.ElementStyle>
    <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource DataGridTextColumnElementErrorStyle}">
        <Style.Triggers>
            <DataTrigger Value="False">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource EqualityConverter}" >
                        <Binding Path="DcVolts" />
                        <Binding Path="DcSpecVolts" />
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="Background" Value="Orange" />
            </DataTrigger>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="Background" Value="Pink" />
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGridTextColumn.ElementStyle>

但问题是,在 Validation.HasError 上,ToolTip 中提供的消息(根据我创建的规则)是重复的。

非常感谢任何建议。

最佳答案

您应该在绑定(bind)路径周围添加括号,因为 Validation.HasError 是一个附加属性:

<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.HasError)}" 
           Value="True" />

关于wpf - 如何根据 Validation.HasError = False 运行 DataTrigger?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286974/

相关文章:

wpf - 如何在标签值更改时设置背景颜色动画

c# - WPF 如何监听一个 BindingBase 对象?

wpf - 在其他控件旁边显示 itemtemplate 中的用户控件列表

wpf - 如何防止 ComboBox 中的 NewItemPlaceholder 行绑定(bind)到与 WPF 中的 DataGrid 相同的 DataTable

wpf - TextBlock 样式触发器

c# - WPF MVVM ObservableCollection/DataGrid 多个 Sql 表

c# - 重新排序 DatagridViews 列并以编程方式保存新位置

WPF 动画优化

wpf - 有没有好的 WPF 控件库?

wpf - MVVM- View 模型- View 模型通信