2009-07-28 3 views
4

Я использую проверку WPF для проверки TextBox. Я определил этот шаблон:WPF ErrorTemplate видна, когда не сфокусирована?

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}" BasedOn="{StaticResource StyleTextBox}">   
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
         Path=(Validation.Errors)[0].ErrorContent}"/> 
       <Setter Property="Background" Value="{StaticResource TextBox_ErrorBackgroundBrush}"/> 
       <Setter Property="BorderBrush" Value="{StaticResource TextBox_ErrorBorderBrush}"/> 
       <Setter Property="BorderThickness" Value="2"/>      
      </Trigger> 
     </Style.Triggers> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <DockPanel> 
         <TextBlock DockPanel.Dock="Right" Foreground="Red" FontSize="20" Text="!"/> 
         <AdornedElementPlaceholder/> 
        </DockPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

TextBox находится на форме в TabItem. Все работает отлично, но '!' TextBlock остается видимым, когда я выбираю другие TabItems. Такое поведение наблюдается во многих других случаях - когда расширитель расширяется и т. Д. Exklamation всегда остается видимым в одном месте, хотя TextBox не дублируется.

ответ

5

Это то, что мы делаем ...

<Style x:Key="ErrorTemplate" TargetType="Control"> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <!--Set your error template in here--> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsVisible" Value="false"> 
      <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+2

Это есть одна проблема! В НЕКОТОРЫХ случаях WPF выбрасывает и исключает путем рендеринга (не может добавить значение NULL в коллекцию). Это происходит, когда у меня есть TextBox внутри UserControl, и я сохраняю его в кеше, и я перезагружаю экземпляр из кеша. –

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