2009-07-28 81 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的窗體中。 一切工作正常,但'!'當我選擇其他TabItem時,TextBlock保持可見。在許多其他情況下會出現這種行爲 - 當擴展器展開等等時,Excklamation始終在相同的位置保持可見,儘管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通過渲染引發異常(無法將值添加到集合中)。它發生在UserControl內部的TextBox並將其保存在緩存中時,並且我從緩存中重新加載實例。 – 2010-07-01 07:43:52