c# - 仅当启用控件时才在 WPF 中运行验证

标签 c# .net wpf

我正在对 .NET 4.0 中的几个 WPF 控件应用绑定(bind)验证。目前,当我的控件未通过某组 ValidationRules 时,它们会变成红色并显示一条小警告消息。问题是,即使它们被禁用,它们仍然无法通过各自的验证。这可能会误导最终用户,因此我只想在启用控件时运行验证。我不太确定如何实现此功能。

我通过通过特定验证类连接的 Binding.ValidationRule 进行验证。

编辑: 显示错误的原因是因为我的验证检查该字段是否为空。当表单加载时,字段为空并且验证失败,即使它们被禁用也是如此。

最佳答案

让我回答我自己的问题:

根据我的研究,确实没有办法做到这一点。在控件被禁用时不显示验证错误的最佳方法是创建一个 Validation.ErrorTemplate,它专门用于控件验证失败并被禁用时。我使用这种技术来解决这个问题。

类似的东西:

<Trigger Property="IsEnabled" Value="false">
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>
                            <DockPanel>
                                <Border BorderBrush="Gray" BorderThickness="0">
                                    <AdornedElementPlaceholder/>
                                </Border>
                            </DockPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>

当验证失败且控件被禁用时,不会显示红色错误边框。

关于c# - 仅当启用控件时才在 WPF 中运行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17369508/

相关文章:

c# - 发行阅读智能卡

c# - 在 WebBrowser 文档中获取鼠标点击坐标

c# - if (false == true) 在内部抛出异常时执行 block

c# - 将 WPF 数据网格列标题绑定(bind)到代码后面的属性

c# - 获取是否可以在我的应用程序中复制某些内容

c# - 使用 asp.net c# 在 Reportviewer 中设置文本框值

c# - 系统.安全.加密.SHA256Cng .NET Core

c# - 我应该使用 MethodInvoker 还是 Action

c# - 是否可以始终使用 Task 强制一个新线程?

c# - 将 XAML 绑定(bind)到字典