2013-08-19 13 views
5

Przeszukałem i nie widziałem rozwiązania.Etykietka nie wyświetla się, gdy brak błędu sprawdzania poprawności WPF

Mogę tylko uzyskać sprawdzanie poprawności, aby wyświetlić etykietę narzędzia, jeśli nie ustawię podpowiedzi we właściwości etykiety narzędzia pola kombi. Chciałbym zobaczyć etykietę błędu sprawdzania poprawności, gdy jest obecny, inaczej pokaż etykietę narzędzia z właściwości combobox. Etykieta narzędzia sprawdzania poprawności wyświetla się poprawnie po usunięciu tekstu z właściwości tooltip (tj. Z panelu właściwości dla pola kombi).

XAML w Application.Resources (App.xaml) na etykiecie, aby pokazać błąd sprawdzania poprawności jest

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

ja też użyć szablonu poprawności dla ComboBox w następujący sposób. Znajduje się w sekcji UserControl.Resources w pliku cs kontrolki użytkownika.

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

Samą kontrolę definiuje się w następujący sposób. Zauważ, że istnieją inne odniesienia nie zdefiniowane tutaj (ale miejmy nadzieję, że nie są one istotne - prosimy o poinformowanie mnie, jeśli pytania).

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

Dzięki! Buck

Odpowiedz

8

W twoim stylu wyzwala ustawienie podpowiedzi na błąd sprawdzania poprawności, gdy wystąpi błąd. Można zrobić to samo, gdy nie masz błąd poprzez manipulowanie własność 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> 

Value Na innej notatki polecam zmianę Path=(Validation.Errors)[0].ErrorContent do Path=(Validation.Errors).CurrentItem.ErrorContent

+0

Wielkiej odpowiedzi. Działa doskonale - dziękuję! – Buck

+0

Świetne rozwiązanie, ale co zrobić, jeśli chcę zastosować to do różnych pól złożonych, z których każdy ma inną etykietę. To znaczy. Combobox1 ma etykietkę "I am one", a ComboBox2 ma etykietkę "I'm # 2". Zgaduję, że coś takiego jak , ale nie działa poprawnie! – Dave

Powiązane problemy