J'ai une fenêtre WPF qui utilise la validation. J'ai créé un modèle d'erreur qui place une bordure rouge autour d'un élément qui échoue à la validation et affiche le message d'erreur ci-dessous. Cela fonctionne correctement, mais le message d'erreur est affiché au-dessus de tous les contrôles sous le contrôle avec l'erreur. Le mieux que je puisse dire, cela se produit parce que le modèle d'erreur rend sur Adorner Layer, qui est au-dessus de tout le reste. Ce que j'aimerais voir se produire, c'est que tout le reste descende pour faire place au message d'erreur. Y a-t-il un moyen de faire cela? Tous les exemples sur le Web semblent utiliser une info-bulle et utilisent un indicateur simple comme un astérisque ou un point d'exclamation qui n'utilise pas beaucoup d'espace.Comment développer un contrôle dans WPF pour faire de la place pour les messages d'erreur dans un ErrorTemplate?
Voici le modèle:
<ControlTemplate x:Key="ValidationErrorTemplate">
<StackPanel>
<Border BorderBrush="Red" BorderThickness="2" CornerRadius="2">
<AdornedElementPlaceholder x:Name="placeholder"/>
</Border>
<TextBlock Foreground="Red" FontSize="10" Text="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent, FallbackValue=Error!}"></TextBlock>
</StackPanel>
</ControlTemplate>
Voici les commandes en utilisant le modèle (je tapais une partie de ceci, donc ignorer les erreurs de syntaxe):
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Name="Account" Grid.Row="0" Validation.ErrorTemplate="{StaticResource ValidationErrorTemplate}" Width="200">
<TextBox.Text>
<Binding Path="AccountNumber">
<Binding.ValidationRules>
<validators:RequiredValueValidationRule/>
<validators:NumericValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox Name="Expiration" Grid.Row="1" Validation.ErrorTemplate="{StaticResource ValidationErrorTemplate}" Width="100" Margin="0,2,5,2">
<TextBox.Text>
<Binding Path="ExpirationDate">
<Binding.ValidationRules>
<validators:ExpirationDateValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</Grid>
Très cool! J'aimerais pouvoir vous donner plusieurs votes. ;) –
Merci, j'espère que cela a aidé :)! Si vous trouvez un meilleur moyen, faites le moi savoir. J'ai essayé de créer une solution en utilisant les propriétés de dépendance attachées, mais je ne me souviens pas de ce qui est arrivé ... – Charles