WPF-验证-验证错误消息由于 AdornerDecorator 而落后于其他控件

Posted

技术标签:

【中文标题】WPF-验证-验证错误消息由于 AdornerDecorator 而落后于其他控件【英文标题】:WPF- Validation -The validation error message goes behind the other controls because of AdornerDecorator 【发布时间】:2010-12-29 07:37:09 【问题描述】:

我已经在我的 ViewModel 中实现了 IDataErrorInfo 以在文本框有错误时返回一个字符串。

    public string this[string columnName]
    
        get  return "Error-- This is a long error message - sd"; 
    

但此错误消息位于 UI 上的其他控件之后,如下所示。

下面是xaml:

<Window x:Class="Test.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="600" Width="600">

<Window.Resources>        
    
    <ControlTemplate x:Key="validationTemplateNew">
        <DockPanel LastChildFill="True">
            <TextBlock Name="ErrorText" DockPanel.Dock="Bottom" Foreground="White" Background="Red" 
                                   FontSize="12" Padding="2" FontFamily="Trebuchet MS" 
                                   Margin="5,5,0,0"                                        
                                   TextWrapping="Wrap"                                        
                                   Text="Binding [0].ErrorContent" ></TextBlock>
            <AdornedElementPlaceholder Name="ErrorTextBox" />
        </DockPanel>
    </ControlTemplate>
    <Style x:Key="ValidationStyle" TargetType="x:Type TextBox">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="BorderBrush" Value="Red" />
                <Setter Property="BitmapEffect">
                    <Setter.Value>
                        <BitmapEffectGroup>
                            <OuterGlowBitmapEffect GlowColor="Red" GlowSize="3" Noise="0.6"></OuterGlowBitmapEffect>
                        </BitmapEffectGroup>
                    </Setter.Value>
                </Setter>                    
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <ItemsControl Name="ItemCtrl">

        <AdornerDecorator>
            <TextBox 
             FontSize="11" 
             Margin="10" 
             Width="250"      
             VerticalAlignment="Center"                                         
             Text="Binding Path=StrText, ValidatesOnDataErrors=True, 
                    UpdateSourceTrigger=PropertyChanged" 
             Validation.ErrorTemplate="StaticResource validationTemplateNew"
            Style="StaticResource ValidationStyle"
             
             >
            </TextBox>
        </AdornerDecorator>
        <TextBox Width="250" Text="ASDFASFASDFASDFASDFASDFASDF"/>
        <TextBox Width="250" Text="ASDFASFASDFASDFASDFASDFASDF"/>
        <TextBox Width="250" Text="ASDFASFASDFASDFASDFASDFASDF"/>
        <TextBox Width="250" Text="ASDFASFASDFASDFASDFASDFASDF"/>
        <TextBox Width="250" Text="ASDFASFASDFASDFASDFASDFASDF"/>
    </ItemsControl>        
</Grid>

</Window>

请告诉我如何使用 AdornerDecorator 以使错误消息与其他控件重叠并且不会落后。

我的应用程序是这样的,如果我不使用 AdornerDecorator,则根本不会显示错误消息。

【问题讨论】:

【参考方案1】:

在 AdornerDecorator 上添加 Grid.ZIndex 就足够了

<Grid>
    <ItemsControl Name="ItemCtrl">
        <AdornerDecorator Grid.ZIndex="1">

【讨论】:

以上是关于WPF-验证-验证错误消息由于 AdornerDecorator 而落后于其他控件的主要内容,如果未能解决你的问题,请参考以下文章

WPF 绑定组验证

WPF数据验证

如何在 WPF 中扩展控件以便为 ErrorTemplate 中的错误消息腾出空间?

检测 WPF 验证错误

jquery验证插件不在rails中显示错误消息

maxlength 属性的角度验证消息