2013-08-19 15 views
5

Ich habe gesucht und keine Lösung gefunden.Tooltip wird nicht angezeigt, wenn kein Validierungsfehler aufgetreten ist WPF

Ich kann die Validierung nur erhalten, um den Tooltip anzuzeigen, wenn ich keine Tooltip in der Tooltip-Eigenschaft des Kombinationsfelds festlegen. Ich möchte die Validierungsfehler-QuickInfo sehen, wenn eine vorhanden ist, ansonsten zeige die QuickInfo aus der Combobox-Eigenschaft. Die Validierungs-QuickInfo wird angezeigt, wenn ich den Text aus der QuickInfo-Eigenschaft entferne (z. B. aus dem Eigenschaftsfenster des Kombinationsfelds).

XAML in Application.Resources (App.xaml) für den Tooltip der Validierungsfehler zeigen

<Style x:Key="StandardComboBoxStyle" TargetType="{x:Type ComboBox}"> 
    <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> 

I auch eine Validierungsvorlage für die Combobox wie folgt verwenden. Dies ist im Abschnitt UserControl.Resources innerhalb der Benutzersteuerelement-CS-Datei.

<ControlTemplate x:Key="comboBoxValidationTemplate"> 
    <DockPanel Name="myDockPanel"> 
     <Border BorderBrush="Red" BorderThickness="3"> 
      <AdornedElementPlaceholder Name="MyAdorner" /> 
     </Border> 
     <TextBlock Text="*" FontWeight="Bold" FontSize="18" Foreground="Red" DockPanel.Dock="Left" /> 
    </DockPanel> 
</ControlTemplate> 

Die Steuerung selbst ist wie folgt definiert. Beachten Sie, dass es andere Referenzen gibt, die hier nicht definiert sind (aber hoffentlich nicht relevant - bitte lassen Sie mich wissen, wenn Sie Fragen haben).

 <ComboBox x:Name="ExposureTime" SelectedValuePath="Content" 
     Text="{Binding ExposureTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" IsEditable="True" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}" 
     HorizontalContentAlignment="Right" FontSize="18" Margin="136,47,462,0" Height="27" VerticalAlignment="Top" GotFocus="ComboBox_GotFocus_1" LostFocus="ComboBox_LostFocus_1" PreviewTextInput="ExposureTime_PreviewTextInput" Opacity="{Binding BackgroundOpacity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontWeight="Thin" Style="{DynamicResource StandardComboBoxStyle}" SelectedValue="{Binding Mode=OneWay, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" IsTextSearchEnabled="False" ToolTip="My tooltip test."> 
     <ComboBoxItem Content="0.05"/> 
     <ComboBoxItem Content="0.1"/> 
     <ComboBoxItem Content="0.2" /> 
     <ComboBoxItem Content="1" /> 
     <ComboBoxItem Content="2" /> 
     <ComboBoxItem Content="5" /> 
     <ComboBoxItem Content="10" /> 
     <ComboBoxItem Content="20" /> 
     <ComboBoxItem Content="60" /> 
     <ComboBox.IsEnabled > 
      <MultiBinding Converter="{StaticResource multiBooleanConverter}"> 
       <Binding Path="NotPerformingExposure" UpdateSourceTrigger="PropertyChanged"/>Th 
       <Binding Path="NotPerformingFocusTest" UpdateSourceTrigger="PropertyChanged"/> 
      </MultiBinding> 
     </ComboBox.IsEnabled> 
    </ComboBox> 

Vielen Dank! Buck

Antwort

8

In Ihrem Stil Trigger setzen Sie den Tooltip auf den Validierungsfehler, wenn Sie einen Fehler haben. Sie können das gleiche tun, wenn Sie durch die Manipulation der Value Eigenschaft des Trigger

<Style x:Key="StandardComboBoxStyle" TargetType="{x:Type ComboBox}"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
     <Trigger Property="Validation.HasError" Value="False"> 
      <Setter Property="ToolTip" Value="My tooltip test." /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Auf einer anderen Anmerkung keinen Fehler haben ich empfehlen würde Path=(Validation.Errors)[0].ErrorContent zu Path=(Validation.Errors).CurrentItem.ErrorContent

+0

Großer Resonanz zu verändern. Es funktioniert perfekt - danke !! – Buck

+0

Tolle Lösung, aber was würde ich tun, wenn ich dies auf verschiedene Kombinationsfelder anwenden möchte, von denen jedes einen anderen Tooltip hat. I.e. Combobox1 hat Tooltip "Ich bin eins" und ComboBox2 hat Tooltip "Ich bin # 2". Ich vermute etwas wie aber es funktioniert nicht! – Dave