【问题标题】:WPF Validation ErrorTemplate display troubleWPF Validation ErrorTemplate 显示问题
【发布时间】:2016-06-14 20:20:37
【问题描述】:

我有一个包含两行两列的简单 WPF 网格。 第二列包含绑定到某些视图模型属性的 TextBox-es。我需要自定义这些 TextBoxes 验证 ErrorTemplates 以在问题框上方显示验证错误。

以下代码

<Style TargetType="Control" x:Key="ValidationControlStyle">
  <Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
      <ControlTemplate>
        <StackPanel>
          <TextBlock Foreground="Red"
                     Text="{Binding ElementName=ErrorAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
          <AdornedElementPlaceholder x:Name="ErrorAdorner"/>
        </StackPanel>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

当错误信息在视觉上重叠在行上方时会产生非常难看的结果(见下图)

如何在问题字段上方放置验证错误(网格行应增加其高度)?

【问题讨论】:

  • 也许将验证文本块放在主 UI 层中,并使用基于 Validation.HasError 的 DataTrigger 设置其可见性?我不记得确切的绑定语法,但 this answer 看起来应该可以工作。
  • @Rachel,是的,这正是我最终所做的。请回答问题,我会将您的建议标记为答案。谢谢!

标签: wpf validation errortemplate


【解决方案1】:

也许将验证 TextBlock 放在主 UI 层中,并使用基于 Validation.HasError 的 DataTrigger 设置其 Visibility?

绑定语法应该是这样的:

<Style x:Key="ErrorTextBlock" TargetType="{x:Type TextBlock}">
    <Setter Property="Visibility" Value="False" />
    <Setter Property="Foreground" Value="Red" />
    <DataTrigger Binding="{Binding ElementName=MyTextBox, Path=Validation.HasError" Value="True">
        <Setter Property="Visibility" Value="True"/>
    </DataTrigger>
</Style>

如果您愿意,我相信也有一些方法可以使其通用:)

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多