2010-12-29 16 views
5

He implementado IDataErrorInfo en mi ViewModel para devolver una cadena si el cuadro de texto tiene un error.WPF- Validación: el mensaje de error de validación va detrás de los otros controles debido a AdornerDecorator

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

Pero este mensaje de error va detrás del otro control en la interfaz de usuario como se muestra a continuación.

alt text

A continuación se muestra el código 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> 

Por favor, hágamelo saber cómo utilizar AdornerDecorator de tal manera que el mensaje de error se superpone a los otros controles y no va más atrás.

Mi aplicación es tal que si no uso AdornerDecorator, el mensaje de error no se muestra en absoluto.

Respuesta

3

Adición Grid.ZIndex en el AdornerDecorator debe ser lo suficientemente

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

Gracias .. Funciona .. –

Cuestiones relacionadas