WPF Validation ErrorTemplate 显示问题
WPF Validation ErrorTemplate display trouble
我有一个包含两行和两列的简单 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>
当错误消息在视觉上重叠在行上方时,结果非常难看(见下图)
如何将验证错误放在问题字段的正上方(网格行应增加其高度)?
也许将验证 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>
我敢肯定,如果您愿意,也可以通过某种方式使其通用:)
我有一个包含两行和两列的简单 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>
当错误消息在视觉上重叠在行上方时,结果非常难看(见下图)
如何将验证错误放在问题字段的正上方(网格行应增加其高度)?
也许将验证 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>
我敢肯定,如果您愿意,也可以通过某种方式使其通用:)