Wpf Validation.ErrorTemplate大小

Wpf Validation.ErrorTemplate大小,wpf,xaml,wpf-controls,Wpf,Xaml,Wpf Controls,我有以下控件模板,用作文本框的验证.ErrorTemplate:- <ControlTemplate x:Key="ControlValidationErrorTemplate"> <DockPanel LastChildFill="True"> <Border Background="Red" DockPanel.Dock="right" Padding="2,0,2,0" Too

我有以下控件模板,用作文本框的
验证.ErrorTemplate
:-

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

当文本框包含无效内容时,上述模板将应用红色边框,并在TB的右侧立即添加一个包含感叹号的红色框

问题是,感叹号与TB右侧的任何内容重叠,而不是布局更改以容纳感叹号。我在DataGrids中也有类似的问题-感叹号重叠在包含单元格的右边缘,而不是增加列宽以容纳它


使用Snoop,模板似乎显示在一个“装饰层”中,我假设它是一个单独的视觉树?这就解释了为什么不重新计算窗口的布局来考虑感叹号。有人能提出一个方法来实现我想要的吗

正如我所怀疑的,这是由于在装饰层上渲染错误模板造成的,因此不会影响窗口的布局。见:

我现在使用此控件模板:-

<ControlTemplate x:Key="ControlValidationErrorTemplate">
  <Grid>
    <Polygon Points="9,9 9,0 0,0"
             Stroke="Red"
             StrokeThickness="1"
             Fill="Red"
             HorizontalAlignment="Right"
             VerticalAlignment="Top"
             ToolTip="{Binding ElementName=valAdorner, Path=AdornedElement.(Validation.Errors), Converter={x:Static val:ValidationErrorsConverter.Instance}}" />
    <AdornedElementPlaceholder x:Name="valAdorner"
                               VerticalAlignment="Center">
      <Border BorderBrush="red"
              BorderThickness="1" />
    </AdornedElementPlaceholder>
  </Grid>
</ControlTemplate>


这将在控件周围绘制一个红色边框,在控件的右上角有一个小的红色三角形重叠-悬停在该边框上会显示包含错误消息的工具提示。

这没有帮助,但我遇到了相同的问题,只是在文本框下方有验证错误消息。@BenCr请参阅下面的我的答案。不确定它是否对你有帮助…谢谢,但我的界面是为触摸设计的,所以工具提示不起作用。我只是为我的验证消息留出了更多的空间,这样它们就不会与其他控件重叠。