wpf-Fehler-Vorlage - rote box immer noch sichtbaren Zusammenbruch des Expanders
Mache ich einige, die Validierung auf die Datenquelle des Textfelds innerhalb eines Expander-und haben gefunden, dass, sobald ein Validierungsfehler ausgelöst hat, falls ich umfalle, den Expander, das rote Feld bleibt, wo die TextBox gewesen wäre.
<Expander Header="Blah Blah Blah">
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</Expander>
Habe ich versucht, um diese durch die Bindung der Sichtbarkeit des Fehlers Vorlage zum Expander, aber ich denke, es ist etwas falsch mit der Bindung.
<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>
Ich denke, ich habe ein Problem mit meiner Bindung, kann jemand mir wieder auf die Strecke bitte? Alternativ kennt jemand eine andere Lösung für das ErrorTemplate noch sichtbar auf den Zusammenbruch des Expanders?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstatt jede Bindung, konnte Sie ein
AdornerDecorator
um die Elemente im inneren des Expanders. Sie sehen, die Fehler bei der überprüfung der Vorlage platziert wird auf die adorner-Ebene, die Art und Weise, es zeigt oben auf alles andere. Das ist letztlich das, was dein problem ist. Auch wenn Ihr Textfeld ist nicht sichtbar, weil der expander geschlossen ist, wird das error-template ist immer noch auf der adorner Schicht.Ich glaube, Sie können dieses Problem beheben mit den folgenden xaml-Code:
Dadurch entsteht ein adorner-Schicht, die speziell für innerhalb der expander. Wenn der expander ist geschlossen, die
AdornerDecorator
bekommt auch versteckte und so sollte alles auf Sie.AdornerDecorator
auf das layout überhaupt? +1Im Allgemeinen debugging-Bindungen kann getan werden durch:
In dem code, den Sie gepostet haben, ich glaube, es Los zu werden, weil die Value-Eigenschaft Setter ist nicht mit einer Abhängigkeitseigenschaft und kann daher nicht gebunden werden.
Werde ich mal nachdenken und sehen, ob ich kommen kann, mit etwas mehr hilfreich.
Check-out Donnelle Antwort auf Wie kann ich loszuwerden, das rote Rechteck, wenn meine wpf-Bindung Validierung ist fehlgeschlagen und die entsprechende panel nicht mehr sichtbar ist?. Bei mir hat es geklappt mit dem expander.