我们通过StatusBar中的Validation.ValidationAdornerSite显示错误。随着ValidationAdornerSite的使用,似乎wpf禁用了Validation.ErrorTemplate。
如何才能同时实现ErrorTemplate的显示?我们目前有一个折衷方案,我们只在ValidationAdornersite上通过触发器设置它来显示内容,这样只要鼠标在控件之外,ErrorTemplate就会显示出来。
<Style x:Key="ValidationStyle">
<Setter Property="Validation.ErrorTemplate"
Value="{StaticResource Default_ErrorTemplate}" />
<Style.Triggers>
<Trigger Property="UIElement.IsMouseOver"
Value="True">
<Setter Property="Validation.ValidationAdornerSite"
Value="{Binding ValidationAdornerSite,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
</Trigger>
<Trigger Property="Validation.HasError"
Value="true">
<Setter Property="FrameworkElement.ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>发布于 2011-11-18 20:49:08
在查看了ILSpy是如何实现验证的之后,我得出的结论是,这种行为是不能改变的。
像ValidationAdornerSite和ValidationAdornerSiteFor那样做类似的事情要容易得多。定义两个具有相似行为的附加依赖道具。然后使用它而不是标准的adonersite道具:
<Setter Property="gw:FormValidation.ValidationSite"
Value="{Binding ValidationAdornerSite,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />..
<TextBlock x:Name="PART_ValidationAdornerSite"
HorizontalAlignment="Center"
Text="{Binding RelativeSource={RelativeSource Self}, Path=(gw:FormValidation.ValidationSiteFor).(Validation.Errors)[0].ErrorContent, NotifyOnTargetUpdated=True}"
TargetUpdated="PART_ValidationAdornerSite_TargetUpdated"
TextBlock.Foreground="Red"/>..
this.ValidationAdornerSite = this.PART_ValidationAdornerSite;这是一个包含dp "ValidationAdornerSite“的窗口。注意,这个解决方案可以简化,但它符合我的需要,因为我验证的控件位于不知道窗口( shell)的模块(PRISM)中。
https://stackoverflow.com/questions/8037032
复制相似问题