Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Validation.HasError触发器属性WPF时仅显示false样式_C#_Wpf_Xaml_.net 3.5_Validation - Fatal编程技术网

C# 使用Validation.HasError触发器属性WPF时仅显示false样式

C# 使用Validation.HasError触发器属性WPF时仅显示false样式,c#,wpf,xaml,.net-3.5,validation,C#,Wpf,Xaml,.net 3.5,Validation,我有一个文本框的自定义样式,我只想允许输入数值 我已经创建了一个自定义ValidationRule来检查这一点 如果输入有效,我希望显示绿色边框,如果无效,我希望显示红色边框。出现错误时,红色边框显示正确,但输入正确时,绿色边框显示不正确,它只显示文本框默认值 自定义ValidationRule中的ValidateResult方法是: public override ValidationResult Validate(object value, System.Globalization.Cul

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

我已经创建了一个自定义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>


当输入正确验证时,如何使边框显示为绿色?

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

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

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


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

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


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

我宁愿当盒子是空的时候它没有边框,这就是为什么我希望用这种方式将它设置为绿色。我必须在文本框的文本更改事件中对其进行控制。我希望当文本框为空时它没有边框,这就是我希望以这种方式将其设置为绿色的原因。我必须在文本框的文本更改事件中控制它。