gpt4 book ai didi

WPF 错误模板 - 扩展器折叠时红色框仍然可见

转载 作者:行者123 更新时间:2023-12-02 13:59:21 25 4
gpt4 key购买 nike

我正在对 Expander 内的 TextBox 的数据源进行一些验证,并发现一旦触发验证错误,如果我折叠 Expander,红色框将保留在 TextBox 所在的位置。

<Expander Header="Blah Blah Blah">
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</Expander>

我尝试通过将错误模板的可见性绑定(bind)到扩展器来解决此问题,但我认为绑定(bind)有问题。

<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>

我想我的绑定(bind)出了问题,有人可以让我回到正轨吗?或者,有人知道 ErrorTemplate 在 Expander 折叠时仍然可见的另一种解决方案吗?

最佳答案

您可以在扩展器内部的元素周围放置一个AdornerDecorator,而不是进行任何绑定(bind)。您会看到,验证错误模板放置在装饰层上,这样它就会显示在其他所有内容之上。这最终就是你的问题所在。即使您的文本框因扩展器关闭而不可见,错误模板仍然位于装饰层上。

我相信您可以使用以下 xaml 修复此问题:

<Expander Header="Blah Blah Blah">
<AdornerDecorator>
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</AdornerDecorator>
</Expander>

这将创建一个专门用于扩展器内的装饰层。当扩展器关闭时,AdornerDecorator 也会被隐藏,上面的所有内容也应该被隐藏。

关于WPF 错误模板 - 扩展器折叠时红色框仍然可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com