【问题标题】:The element carrying error message showing only partially on validation携带错误消息的元素仅在验证时部分显示
【发布时间】:2013-06-03 03:33:26
【问题描述】:

这是我要验证的 TextBox 元素的标记:

<StackPanel Margin="7">
    <Label x:Name="lblPrompt" Margin="7,12,7,5" Target="{Binding ElementName=txtInput}" />

    <TextBox x:Name="txtInput" Margin="7,0,7,7" Validation.ErrorTemplate="{StaticResource ErrTemplate}" />

    <UniformGrid Rows="1" Columns="2" HorizontalAlignment="Right" Width="Auto" Margin="7,7,7,3">
        <Button x:Name="btnOK" Content="_OK" Padding="2" Margin="0,0,7,0"  Background="BlanchedAlmond" Click="btnOK_Click" />
        <Button x:Name="btnCancel" Content="_Cancel" Padding="2" Margin="7,0,7,0" IsCancel="True" Background="BlanchedAlmond" Click="btnCancel_Click" />
    </UniformGrid>
</StackPanel>

而TextBox's error template的定义如下:

<ControlTemplate x:Key="ErrTemplate">
    <StackPanel Orientation="Horizontal">
        <AdornedElementPlaceholder x:Name="adorner" />
        <TextBlock Text="{Binding ElementName=adorner,
                                  Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" Background="Red" Foreground="White" Margin="3,0,0,0" TextWrapping="Wrap" MinWidth="100" />
        </StackPanel>
    </ControlTemplate>

现在,当TextBox 控件上的验证失败时,错误模板中定义的TextBlock 元素只会部分显示。请看这张图片:

您能否建议如何解决?

【问题讨论】:

    标签: wpf errortemplate


    【解决方案1】:

    StackPanel 不限制其边界,因此将其包装到错误模板中的网格中(确实如此),这应该可以解决问题。

    【讨论】:

    • 不。它没有解决问题。将 StackPanel 放在 Grid 面板下会产生相同的输出,而将控件直接放在网格下会导致 TextBlock 元素覆盖在 TextBox 元素上。
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2016-08-08
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多