在我的WPF应用程序中,我想在用户编辑/输入/聚焦控件后才显示验证装饰器。这样,用户有机会向字段提供有效输入,只有在他们选择不这样做时,验证才会显示。
我们希望鼓励用户填写每个字段,因此在表单首次打开时指示必填字段可能会绕过这一点,因为用户立即倾向于仅完成所需的内容,以消除大红色验证错误,这也可能绕过表单的流程。
是否有一种方法可以知道控件是否已经拥有焦点?或许一个附加属性可以起作用?
如果有更具体的响应有助于提供:这是我目前的验证样式,它显示了一个红色边框[如果控件有边框]和带有错误消息工具提示的小感叹号(实际上非常标准):
我们希望鼓励用户填写每个字段,因此在表单首次打开时指示必填字段可能会绕过这一点,因为用户立即倾向于仅完成所需的内容,以消除大红色验证错误,这也可能绕过表单的流程。
是否有一种方法可以知道控件是否已经拥有焦点?或许一个附加属性可以起作用?
如果有更具体的响应有助于提供:这是我目前的验证样式,它显示了一个红色边框[如果控件有边框]和带有错误消息工具提示的小感叹号(实际上非常标准):
<Style TargetType="Control">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="true">
<Image Source="../Resources/Icons/Error.ico" Margin="4" Width="15" ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}" />
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" >
<Border BorderBrush="red" BorderThickness="1" Visibility="{Binding ElementName=customAdorner, Path=AdornedElement.BorderThickness, Converter={StaticResource hasBorderToVisibilityConverter}}" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsVisible" Value="False">
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Trigger>
</Style.Triggers>
</Style>