2010-11-04 3 views
4

J'ai une liste déroulante que j'ai besoin d'éditer son modèle d'erreur pour montrer une bordure rouge quand il y a une erreur de validation.WPF Combobox Erreur Validation.ErrorTemplate

J'utilise le style suivant

<Style TargetType="{x:Type ComboBox}" > 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <DockPanel> 
        <Border BorderBrush="Red" BorderThickness="3"> 
         <AdornedElementPlaceholder /> 
        </Border> 
       </DockPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="FontFamily" Value="Segoe UI" /> 
    <Setter Property="FontSize" Value="12" /> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
</Style> 

La frontière ne se présente jamais en cas d'erreurs de validation se produisent. Des conseils sur ce qui ne va pas?

Répondre

1

entrer dans l'hà © rà © rarchie de code sans le panneau de dock, ce qui est inutilisà © car il enveloppe le jus un élément. Cependant, je ne sais pas si c'est logique d'envelopper une zone de texte avec une bordure, car elle a déjà une bordure! Vous devriez essayer de changer directement la couleur de sa bordure. Vous pouvez essayer d'utiliser à nouveau le panneau mais mettre la bordure autour du panneau-à-dire:

Border BorderBrush = "rouge" BorderThickness = "3"
      DockPanel
          AdornedElement

Cela a plus de sens car le panneau d'habillage n'a pas sa propre bordure.

4

Le Style que vous avez publié fonctionne. Vous devriez vérifier votre liaison, avez-vous ajouté ValidatesOnDataErrors=True et ValidatesOnExceptions=True à la reliure de SelectedValue?

1

Utilisez ceci.

<Style x:Key="textBoxStyle" TargetType="{x:Type telerik:RadMaskedTextBox}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="True"> 
       <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
       <Setter Property="Control.BorderBrush" Value="Red" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
1

Je n'aime aucune des réponses ici. En termes simples, comment pouvez-vous changer la couleur de la bordure pour le modèle d'erreur pour un ComboBox en utilisant le mélange ou non? Il ne devrait pas être acceptable de dessiner une autre bordure autour de la bordure existante du ComboBox. J'ai trouvé comment créer un ControlTemplate dans Blend mais pas un Template de Validation. Je suis venu près d'essayer de faire apparaître comme j'ai changé la couleur de la bordure réelle, mais ce n'est pas ce que je veux vraiment. Suggestions? Pour compliquer un peu, j'aimerais afficher un astérisque rouge en dehors de la bordure droite du contrôle.

Le code suivant est une proche tentative, mais il dessine en fait une frontière à l'intérieur du ComboBox et si vous regardez près, vous pouvez voir que la frontière est de 2 pixels de large lorsqu'il est combiné avec la frontière ComboBox:

<DockPanel Name="myDockPanel"> 
     <AdornedElementPlaceholder> 
      <Border BorderBrush="Blue" BorderThickness="1" CornerRadius="2" /> 
     </AdornedElementPlaceholder> 
     <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left" ToolTip="{Binding .CurrentItem}" /> 
    </DockPanel> 
+0

il est intéressant de noter que, aussi bon que mélange est à nous permettant d'éditer des modèles visuellement, il semble difficile ou peut-être impossible pour éditer le 'ErrorTemplate' dans Blend. –

0

Je cherchai dans un peu plus et est venu avec une solution basée sur un autre article ici: WPF - How to apply style to AdornedElementPlaceholder's AdornedElement?

<!-- This works --> 
<ComboBox Name="comboBox1" Style="{StaticResource NewComboBoxStyle}" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}" /> 

<SolidColorBrush x:Key="MainBorderBrush">#FF91B3FF</SolidColorBrush> 

<Style x:Key="NewComboBoxStyle" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource myErrorTemplate}"> 
    <Setter Property="BorderBrush" Value="{DynamicResource MainBorderBrush}" /> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="BorderBrush" Value="Blue" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<!-- Sets ToolTip when Validation.HasError is True. --> 
<Style TargetType="Control" x:Key="myErrorTemplate"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" 
       Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
       Path=(Validation.Errors).CurrentItem.ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<ControlTemplate x:Key="comboBoxValidationTemplate"> 
    <DockPanel Name="myDockPanel"> 
     <AdornedElementPlaceholder/> 
     <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left" ToolTip="{Binding .CurrentItem}" /> 
    </DockPanel> 
</ControlTemplate>