使用验证时仅显示错误的样式.HasError 触发器属性 WPF

本文关键字:HasError 样式 触发器 属性 WPF 错误 验证 显示 | 更新日期: 2023-09-27 18:34:54

我有一个文本框的自定义样式,我只想允许输入数值。

我创建了一个自定义验证规则来检查这一点。

如果

输入有效,我想显示绿色边框,如果不是,我想显示红色边框。出现错误时,红色边框显示正确,但当输入正确时,绿色边框未正确显示,它仅显示文本框默认值。

我的自定义验证规则中的验证结果方法是:

 public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {            
        string input = (value ?? String.Empty).ToString();
        double val;
        if (double.TryParse(input, out val))
        {
            return new ValidationResult(true, OkMessage);
        }
        else return new ValidationResult(false, ErrorMessage);
    }

样式和触发器的定义是:

<Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>                                
                                <Border BorderBrush="Red" BorderThickness="1"/>
                            </DockPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="Validation.HasError" Value="False">
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>                                
                                <Border BorderBrush="Green" BorderThickness="1"/>
                            </DockPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

如何让正确验证输入时边框显示绿色?

使用验证时仅显示错误的样式.HasError 触发器属性 WPF

我相信这是因为在没有

错误时Validation.HasError清除,而不是按照触发器的要求设置为false。为什么不在模板中包含绿色边框?HasError 触发器会将其更改为红色,但在所有其他时间它应该是绿色的,因此最好只是放置该内联而不是触发器。

原因是您正在设置错误模板,当出现错误时他会显示该模板...

您正在将错误模板

颜色更改为绿色,但当没有错误时,错误模板将不可见...