And*_*rke 11 validation wpf binding controltemplate
我正在对ExpBox中的TextBox的DataSource进行一些验证,并且发现一旦触发了验证错误,如果我折叠了Expander,红色框就会停留在TextBox所在的位置.
<Expander Header="Blah Blah Blah">
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</Expander>
Run Code Online (Sandbox Code Playgroud)
我试图通过将错误模板的可见性绑定到扩展器来解决这个问题,但是我认为绑定有问题.
<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>
Run Code Online (Sandbox Code Playgroud)
我想我的绑定出了问题,有人可以让我回到正轨吗?或者,是否有人知道ErrorTemplate的另一个解决方案仍然可以在Expander崩溃时看到?
dus*_*ell 25
您可以放置AdornerDecorator
扩展器内部的元素,而不是进行任何绑定.您可以看到,验证错误模板放置在装饰层上,就像它显示在其他所有内容上一样.这最终是你的问题所在.即使由于展开器已关闭而导致文本框不可见,但错误模板仍在装饰图层上.
我相信你可以通过以下xaml解决这个问题:
<Expander Header="Blah Blah Blah">
<AdornerDecorator>
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</AdornerDecorator>
</Expander>
Run Code Online (Sandbox Code Playgroud)
这会在扩展器内专门创建一个装饰层.当扩展器关闭时,它AdornerDecorator
也会被隐藏,所以它上面的一切都是隐藏的.
归档时间: |
|
查看次数: |
9283 次 |
最近记录: |