2013-08-19 10 views
5

Ho cercato e non ho visto una soluzione.Descrizione comando non visualizzata se non si verifica un errore di convalida WPF

Posso solo ottenere la convalida per mostrare il suggerimento se non ho impostato un suggerimento nella proprietà tooltip della casella combinata. Vorrei vedere il tooltip di errore di validazione quando è presente, altrimenti mostrare la descrizione comando dalla proprietà combobox. Il tooltip di validazione si mostra bene quando rimuovo il testo dalla proprietà tooltip (cioè dal pannello delle proprietà per la casella combinata).

Il XAML in Application.Resources (App.xaml) per la descrizione comandi per mostrare l'errore di convalida è

<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> 

Io uso anche un modello di convalida per il Combobox come segue. Si trova nella sezione UserControl.Resources all'interno del file cs del controllo utente.

<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> 

Il controllo stesso è definito come segue. Si noti che ci sono altri riferimenti non definiti qui (ma si spera non pertinenti), sentitevi liberi di farmi sapere se domande).

 <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> 

Grazie! Buck

risposta

8

Nei trigger di stile si imposta la descrizione comando sull'errore di convalida quando si verifica un errore. Si può fare lo stesso quando non si dispone di un errore manipolando la proprietà Value del 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> 

In un'altra nota Mi consiglia cambiando Path=(Validation.Errors)[0].ErrorContent a Path=(Validation.Errors).CurrentItem.ErrorContent

+0

Grande risposta. Funziona perfettamente - grazie !! – Buck

+0

Ottima soluzione, ma cosa dovrei fare se voglio applicarlo a diverse caselle combinate, ognuna delle quali ha un suggerimento diverso. Cioè Combobox1 ha tooltip "I am one one" e ComboBox2 ha tooltip "I am # 2". Sto indovinando qualcosa come ma non riesco a farlo funzionare! – Dave

Problemi correlati