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
Grande risposta. Funziona perfettamente - grazie !! – Buck
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