2

我有以下样式来验证我的控件中的输入:

<Style x:Key="MyErrorTemplate" TargetType="Control">
    <Style.Setters>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate x:Name="ControlErrorTemplate">
                    <StackPanel Orientation="Vertical" Height="Auto">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
                            <AdornedElementPlaceholder x:Name="Holder"/>
                        </StackPanel>
                        <Label Foreground="Red" Content="{Binding ElementName=Holder, 
                            Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

如果发生错误,标签中的错误消息会出现在控件下方(例如文本框)并与下方控件重叠。我制作了 StackPanel 的 Height="Auto",但没有帮助。每个控件都在一个 Grid 单元格中,并且 Grid 的行高也是 Auto。你能告诉我我错过了什么吗?我希望错误消息将下面的内容向下推。谢谢。

4

2 回答 2

3

Validation.ErrorTemplate在装饰层上显示错误反馈。这意味着当布局系统在装饰元素层上测量和排列控件时,不会考虑此模板中的所有控件。

于 2012-06-28T19:12:58.167 回答
0

我找到了这个并感谢 LPL,我不知道装饰层。

我的解决方案是保证金“黑客”。我刚刚使用了触发器:

    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
            <Setter Property="BorderBrush" Value="Red"/>
            <Setter Property="Margin" Value="0,0,0,28"/>
        </Trigger>
    </Style.Triggers> 

增加装饰文本框的下边距。我将边距设置得足够大,以便为单个字符串文本块/标签腾出空间,然后将下面的内容向下移动

于 2013-01-22T07:04:04.673 回答