1

在我的 WPF 应用程序中,我为我的 TextBoxes 创建了 ValidationRules,这样它就不会允许一个空字符串,它可以正常工作并显示一个带有文本的红色边框,告诉用户它不能为空。当应用程序启动时,所有字段都是空白等待输入,但我仍然看到它们周围的红色边框。这是正常行为吗?注意:我希望它在用户使用表单时触发 propertychange 事件或 lostfocus 事件后触发,而不是在表单最初加载时触发。

我正在做的验证示例:

 <TextBox x:Name="itemNum" HorizontalAlignment="Left" Height="23" Margin="82,58,0,0"     VerticalAlignment="Top" Width="90"
            HorizontalContentAlignment="Left" VerticalContentAlignment="Center" PreviewKeyDown="ItemNum_PreviewKeyDown" 
            PreviewTextInput="ItemNum_PreviewTextInput" TabIndex="0" Validation.ErrorTemplate="{StaticResource validationErrorTemplate}">
            <TextBox.Text>
                <Binding Path="rxID" Mode="TwoWay" StringFormat="{}{0:#}" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <MY:TextBoxNotEmptyValidationRule x:Name="rxIDValidation" ValidatesOnTargetUpdated="True" />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

我的 TextBoxNotEmptyValidationRule 类:

public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
     {
        string str = value as string;
        if (string.IsNullOrEmpty(str))
        {
            return new ValidationResult(false, "Value CAN NOT BE empty");
        }
        return ValidationResult.ValidResult;
    }
4

2 回答 2

0

按照你的逻辑,这似乎是正常的。让我们定义一个 bool 标志并将其设置为 false 或 true,没关系,而不是当应用程序运行并检查标志时,如果标志值为初始值,则不做任何事情。除此之外,您的“如果”检查还需要检查重点元素。如果焦点元素是我们的文本框并且您的标志不是初始值,那么您可以更改文本块边框。

于 2014-10-21T07:10:39.723 回答
0

您可以查看以下链接: 加载验证

理想情况下,如果您使用 IDataErorInfo 或 INotifyDataErrorInfo ,这是 XAML 应用程序中的正常行为。您可以使用 beginInit 和 EndInit 来实现您想要的输出。

于 2014-10-21T07:12:23.140 回答