Je fais une certaine validation sur la source de données de la zone de texte qui se trouve dans un extenseur et j'ai constaté qu'une fois qu'une erreur de validation a été déclenchée, si je réduit l'extension, la boîte rouge reste lorsque la zone de texte aurait été.
<local:NotVisibleConverter x:Key="NotVisibleConverter" /> <ControlTemplate x:Key="TextBoxErrorTemplate"> <DockPanel> <Border BorderBrush="Red" BorderThickness="2" Visibility="{Binding Path=IsExpanded, Converter={StaticResource NotVisibleConverter}, RelativeSource={RelativeSource AncestorType=Expander}}" > <AdornedElementPlaceholder Name="MyAdorner" /> </Border> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>
3 Réponses :
Plutôt que de faire une liaison, vous pouvez placer un Je pense que vous pouvez résoudre ce problème avec le XAML suivant: P> adornerdecorator code> autour des éléments à l'intérieur de votre expandeur. Vous voyez, le modèle d'erreur de validation est placé sur la couche Adorner de cette façon, il apparaît sur tout le reste. C'est finalement quel est votre problème. Même si votre zone de texte n'est pas visible car l'extension est fermée, le modèle d'erreur est toujours sur la couche Adorner.
<Expander Header="Blah Blah Blah">
<AdornerDecorator>
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</AdornerDecorator>
</Expander>
@Dusty - belle réponse. Je vais essayer cela comme j'ai un problème similaire dans mon application. Le adornerdecorator code> affecte-t-il la mise en page? +1
L'AdornerDecorateur ne doit pas affecter la mise en page. C'est juste une enveloppe autour d'un enfant.
OK, il peut donc être considéré comme préservant la mise en page, mais en soulevant le rendu et l'interaction de son enfant à la couche Adorner? Je pensais qu'il n'y avait qu'une seule couche adoratrice, mais la façon dont vous avez formulé la réponse suggère qu'il constitue un nouveau calque.
@Trew Désolé, je ne voulais pas confondre. Non, il ne souleve pas l'enfant à la couche Adorner. Il crée efficacement une autre couche adoratrice. La nouvelle couche Adorner est utilisée pour les orneurs créés sur n'importe quoi dans l'arborescence visuelle sous l'adornerdecorator. Typiquement, oui, il n'y a qu'une seule couche adoratrice, créée sur la fenêtre. Je pense que le contrôleur par défaut de la classe de la fenêtre a un adornerdecorator. Pas de magie ici.
En général, les liaisons de débogage peuvent être effectuées par: p>
Dans le code que vous avez posté, je crois que cela va être parce que la valeur de valeur sur le setter n'est pas une propriété de dépendance et ne peut donc pas être liée à. P>
Je vais penser à cela et voir si je peux trouver quelque chose de plus utile. p>
Consultez la réponse de Donnelle sur Comment puis-je me débarrasser du rectangle rouge lorsque ma validation de liaison WPF a échoué et que le panneau contenant n'est plus visible? . Cela a fonctionné pour moi avec l'expandeur. P>