gpt4 book ai didi

.net - 错误模板显示在其他控件之上,而本应隐藏它

转载 作者:行者123 更新时间:2023-12-02 17:50:01 25 4
gpt4 key购买 nike

我尝试使用 IDataErrorInfo 接口(interface)在我的 WPF 应用程序中实现验证,但遇到了不太理想的情况。

我有这个模板,当控件验证失败时使用该模板

<ControlTemplate x:Key="errorTemplate">
<DockPanel LastChildFill="true">
<Border Background="Red" DockPanel.Dock="Right" Margin="5,0,0,0" Width="20" Height="20" CornerRadius="10"
ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
<TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White" />
</Border>
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" >
<Border BorderBrush="red" BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>

一切都很好,直到我尝试在验证失败的控件上方显示某些内容,例如在其上方显示停靠项:

Normal display Display when part of the control is hidden

如何避免这种情况并使我的错误模板按其应有的方式显示在停靠项下方?

编辑

我发现我可以用 AdornerDecorator 包装我的 TextBox 来解决这个问题,但我真的不想为每个 TextBox 都这样做 在我的应用程序中进行控制。有没有办法用Style或其他方式设置它?

编辑2

我可能可以更改默认的 TextBox ControlTemplate 以包含 AdornerDecorator,但我不太热衷于更改任何 WPF 的默认控件模板。欢迎任何其他建议。

最佳答案

好的,我找到了一个相对简单的解决方案,它不会强制我更改任何控件模板。

而不是像这样用 AdornerDecorator 装饰每个 TextBox

<StackPanel>
<AdornerDecorator>
<TextBox Text={Binding ...} />
</AdornerDecorator>
<AdornerDecorator>
<TextBox Text={Binding ...} />
</AdornerDecorator>
</StackPanel>

我可以让 AdornerDecorator 包裹我的整个 View ,从而达到相同的结果。

<AdornerDecorator>
<StackPanel>
<TextBox Text={Binding ...} />
<TextBox Text={Binding ...} />
</StackPanel>
</AdornerDecorator>

这样我就可以在每个 View 中最多定义一次。

关于.net - 错误模板显示在其他控件之上,而本应隐藏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294498/

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