2013-04-11 64 views
2

我已经得到了我作为一个Validation.ErrorTemplate为文本框使用下面的控件模板: -Validation.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> 

当一个TextBox包含无效内容,上面的模板应用红色边框,并增加了一个红色的在结核病的右侧立即包含感叹号。

的问题是,感叹号立即重叠什么结核病的权利,而不是布局更改为accomomodate感叹号。我在DataGrids中有类似的问题 - 惊叹号与包含单元格的右边缘重叠,而不是列宽增加以适应它。

使用snoop,看来模板被显示在“装饰器层”我假设是一个单独的视件树?这可以解释为什么不重新计算窗口的布局以考虑感叹号。任何人都可以提出一种方法来实现我想要的?

+0

这没有帮助,但我有同样的问题,只有我的文本框下方的验证错误消息。 – BenCr 2013-04-13 16:07:45

+0

@BenCr在下面看到我的答案。不知道它是否会帮助你的情况... – 2013-04-17 14:01:44

+0

谢谢,但我的界面是专为触摸,所以工具提示是不会工作。我为我的验证消息留下了更多空间,因此它们不会与其他控件重叠。 – BenCr 2013-04-17 14:18:10

回答

2

正如我怀疑,这是由于错误模板装饰器层上被渲染,所以它不影响窗口的布局。请参阅:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9de3c9e5-5759-4f88-9184-175d3eaabdad/

现在,我使用这个控件模板代替: -

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

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