我有以下控件模板,我将其Validation.ErrorTemplate
用作 TextBoxes:-
<ControlTemplate x:Key="ControlValidationErrorTemplate">
<DockPanel LastChildFill="True">
<Border Background="Red"
DockPanel.Dock="right"
Padding="2,0,2,0"
ToolTip="{Binding ElementName=valAdorner, Path=AdornedElement.(Validation.Errors), Converter={x:Static val:ValidationErrorsConverter.Instance}}">
<TextBlock Text="!"
VerticalAlignment="center"
HorizontalAlignment="center"
FontWeight="Bold"
Foreground="white" />
</Border>
<AdornedElementPlaceholder x:Name="valAdorner"
VerticalAlignment="Center">
<Border BorderBrush="red"
BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
当 TextBox 包含无效内容时,上述模板应用红色边框,并在 TB 右侧立即添加一个包含感叹号的红色框。
问题是,感叹号与 TB 右侧的任何内容重叠,而不是更改布局以适应感叹号。我在 DataGrids 中遇到了类似的问题 - 感叹号与包含单元格的右侧边缘重叠,而不是增加列宽以适应它。
使用 Snoop,模板似乎显示在“装饰层”中,我认为这是一个单独的可视化树?这可以解释为什么不重新计算窗口的布局以考虑感叹号。任何人都可以提出一种方法来实现我想要的吗?