DataTrigger 到控件的 Validation.HasError

DataTrigger to a control's Validation.HasError

我有一个使用 INotifyDataErrorInfo 接口的用户控件,当它出错时它会变成红色,在这个用户控件中我放了一个 TextBlock,下面的 DataTrigger 似乎不起作用:

<TextBlock Text="{Binding DurationText}"
            Grid.Row="1">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ActivityUserControl, Path=(Validation.HasError)}"
                             Value="True">
                    <Setter Property="Foreground"
                            Value="White">
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

我确保我的用户控件 (ActivityUserControl) 的 x:Name 是正确的,用户控件本身在出错时变为红色,但 TextBlock 的 DataTrigger 不起作用(文本保持黑色)。

您应该将 DataTriggerValue 设置为开头:

<DataTrigger Binding="{Binding ElementName=ActivityUserControl, Path=(Validation.HasError)}"
             Value="True">
...

您还应确保 ActivityUserControlTextBlock 在同一名称范围内,并且确实包含一些验证错误。

您可以通过使用 RelativeSource 属性 绑定到父级 UserControl 来解决名称范围问题:

Binding="{Binding Path=(Validation.HasError), 
    RelativeSource={RelativeSource AncestorType=UserControl}}"