首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用ValidationAdornerSite和ErrorTemplate

同时使用ValidationAdornerSite和ErrorTemplate
EN

Stack Overflow用户
提问于 2011-11-07 21:20:15
回答 1查看 1.9K关注 0票数 3

我们通过StatusBar中的Validation.ValidationAdornerSite显示错误。随着ValidationAdornerSite的使用,似乎wpf禁用了Validation.ErrorTemplate。

如何才能同时实现ErrorTemplate的显示?我们目前有一个折衷方案,我们只在ValidationAdornersite上通过触发器设置它来显示内容,这样只要鼠标在控件之外,ErrorTemplate就会显示出来。

代码语言:javascript
复制
 <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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-18 20:49:08

在查看了ILSpy是如何实现验证的之后,我得出的结论是,这种行为是不能改变的。

像ValidationAdornerSite和ValidationAdornerSiteFor那样做类似的事情要容易得多。定义两个具有相似行为的附加依赖道具。然后使用它而不是标准的adonersite道具:

代码语言:javascript
复制
 <Setter Property="gw:FormValidation.ValidationSite"
                    Value="{Binding ValidationAdornerSite,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />

..

代码语言:javascript
复制
 <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"/>

..

代码语言:javascript
复制
this.ValidationAdornerSite = this.PART_ValidationAdornerSite;

这是一个包含dp "ValidationAdornerSite“的窗口。注意,这个解决方案可以简化,但它符合我的需要,因为我验证的控件位于不知道窗口( shell)的模块(PRISM)中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8037032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档