2013-02-27 28 views
2

在我們的WPF應用程序,我們有我們用一致的方式有什麼方法可以在ErrorTemplate中設置工具提示嗎?

<ResourceDictionary> 
    <ControlTemplate x:Key="ErrorTemplate"> 
     <Border BorderThickness="1" BorderBrush="Red"> 
      <AdornedElementPlaceholder /> 
     </Border> 
    </ControlTemplate> 
</ResourceDictionary> 

別處在我們的應用程序顯示錯誤時,控制可能會顯示我們設置ErrorTemplate像這樣

<TextBox Validation.ErrorTemplate="{DynamicResource ErrorTemplate}" /> 
錯誤共同控制模板

我現在想在這個錯誤模板中顯示一個工具提示,但是在邊框上設置工具提示屬性並沒有太大的幫助,因爲工具提示只在用戶鼠標懸停在1px寬邊框上時才顯示,而不是控件本身是錯誤的。

我知道我可以在樣式中設置工具提示,但是這個錯誤模板應用於許多不同的控件(組合框等),並且這些控件中的許多控件也使用獨立於我的錯誤模板的樣式 - 我真的希望能夠以通用的方式將我的錯誤模板應用於任何控件。

有什麼方法可以在我的ErrorTemplate中設置工具提示?

+0

相當肯定,這不能做 - 我見過的應用樣式在一個通用的方式做到這一點的最好辦法解釋[這篇文章] (http://blogs.msdn.com/b/bethmassi/archive/2008/06/27/displaying-data-validation-messages-in-wpf.aspx) – Justin 2013-02-28 10:21:48

回答

1

我有一個定義的樣式。我的對象(Customer)上有IDataErrorInfo,它對屬性(LastName)進行了驗證,該屬性是數據綁定到文本框的示例。這是我的風格:

<Style x:Key="ValidationTextBox" TargetType="{x:Type Control}"> 
      <Setter Property="VerticalAlignment" Value="Center"/> 
      <Setter Property="Margin" Value="0,2,40,2"/> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <DockPanel LastChildFill="True"> 
          <Border Background="#B22222" DockPanel.Dock="Right" Margin="5,0,0,0" Width="20" Height="20" CornerRadius="10" 
            ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
           <TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White"/> 
          </Border> 
          <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center"> 
           <Border BorderBrush="#B22222" BorderThickness="1" /> 
          </AdornedElementPlaceholder> 
         </DockPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style 

<TextBox Style="{StaticResource ValidationTextBox}" Text="{Binding Path=Customer.LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />

+0

不幸的是,這隻顯示感嘆號上的工具提示,我'd喜歡爲整個文本框顯示工具提示(或任何控制出錯) – Justin 2013-02-28 09:53:44

0

正如我在my answer here說,您可以:

<ControlTemplate x:Key="ErrorTemplate"> 
    <Border BorderThickness="1" BorderBrush="Red" 
      Background="Transparent" 
      ToolTip="{Binding Path=/ErrorContent}"> 
     <AdornedElementPlaceholder /> 
    </Border> 
</ControlTemplate> 
+0

這有助於顯示工具提示,但也可以防止與底層控件的任何交互。我可以使用IsHitTestVisible =「False」修復這個問題,但不幸的是,我現在回到了與之前完全相同的狀態 - 沒有任何工具提示! – Justin 2013-02-28 09:46:56

0

對不起,我昨天沒有時間......你會試試下面,看看這是你以後的樣子嗎?

<Style x:Key="ValidationTextBox2" TargetType="{x:Type Control}"> 
      <Setter Property="VerticalAlignment" Value="Center"/> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Border BorderBrush="Red" BorderThickness="2"> 
          <DockPanel LastChildFill="True" ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" Background="Transparent"> 
           <TextBlock /> 
          <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center"> 
          </AdornedElementPlaceholder> 
         </DockPanel> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
相關問題