使用Validation.HasError触发器属性WPF时,仅显示错误样式

时间:2012-05-21 13:47:55

标签: c# wpf xaml .net-3.5 validation

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

我已经创建了一个自定义ValidationRule来检查这个。

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

我的自定义ValidationRule中的ValidateResult方法是:

 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>

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

2 个答案:

答案 0 :(得分:3)

我认为这是因为Validation.HasError在没有错误时已清除,而不是因为您的触发器需要设置为false。为什么不在模板中包含绿色边框? HasError触发器会将其更改为红色,但在其他任何时候它都应该是绿色的,所以最好将其放在内联而不是触发器中。

答案 1 :(得分:1)

原因是你正在设置ErrorTemplate,当出现错误时会显示它......

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