2015-09-05 4 views
1

У меня есть элемент управления с проверкой и шаблон шаблона ошибки, который изначально не отображается. Элемент управления становится видимым, когда свойство ContentControl привязано к нему. Однако, когда элемент управления становится видимым, шаблон ошибки применяется только после обновления связанного свойства. Любые мысли, почему это может происходить и что я могу с этим поделать?Validation ErrorTemplate не применяется, когда элемент управления становится видимым

XAML управления сниппет:

<TextBox Name="UserNameTextBox" Grid.Row="0" Grid.Column="1" Style="{StaticResource WinformsErrorTemplate}" Text="{Binding Path=UserName, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" IsEnabled="{Binding Path=CanEditCredentials}"/> 

шаблон ошибки XAML:

 <!-- This error template style emulates a Winforms validation error icon --> 
     <Style x:Key="WinformsErrorTemplate" TargetType="Control"> 
      <Setter Property="Margin" Value="3"/> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <DockPanel LastChildFill="True"> 
          <Ellipse DockPanel.Dock="Right" 
            ToolTip="{Binding ElementName=myTextbox, 
               Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
            Width="15" Height="15" 
            Margin="-25,0,0,10" 
            StrokeThickness="1" Fill="Red" > 
           <Ellipse.Stroke> 
            <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> 
             <GradientStop Color="#FFFA0404" Offset="0"/> 
             <GradientStop Color="#FFC9C7C7" Offset="1"/> 
            </LinearGradientBrush> 
           </Ellipse.Stroke> 
           <Ellipse.Triggers> 
            <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
             <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/> 
            </EventTrigger> 
           </Ellipse.Triggers> 
          </Ellipse> 
          <TextBlock DockPanel.Dock="Right" 
             ToolTip="{Binding ElementName=myControl, 
               Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
             Foreground="White" 
             FontSize="11pt" 
             Margin="-15,0,0,5" FontWeight="Bold">! 
           <TextBlock.Triggers> 
            <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
             <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/> 
            </EventTrigger> 
           </TextBlock.Triggers> 
          </TextBlock> 
          <Border BorderBrush="Red" BorderThickness="1" Margin="0,0,0,10"> 
           <AdornedElementPlaceholder Name="myControl"/> 
          </Border> 
         </DockPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="true"> 
        <Setter Property="ToolTip" 
          Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
            Path=(Validation.Errors)[0].ErrorContent}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

ответ

1

Нашел решение. Проблема заключалась в том, что на уровне окна был AdornerDecorator, но не в любом из UserControls. Следовательно, ErrorTemplate не смог выполнить рендеринг. Исправление было инкапсулировать все ниже UserControl в AdornerDecorator:

<UserControl> 
    <AdornerDecorator> 
     <StackPanel> 
      ... 
     </StackPanel> 
    <AdornerDecorator> 
</UserControl> 

См Validation ErrorTemplate not showing on data errors для получения дополнительной информации.

0

У меня была такая же проблема с программой, которая имела несколько видов внутри элемента управления вкладкой. Ошибка проверки будет отображаться, но исчезнет, ​​когда я перейду на другую вкладку и обратно. Добавление AdornerDecorator для каждого вида устраняет проблему. Thanks

Смежные вопросы