ControlTemplate和验证 - 如何定位项目?

时间:2011-01-31 21:22:19

标签: wpf validation xaml controltemplate controltemplates

我创建了ControlTemplate,如果我的文本框上有验证错误,则会显示。我的controltemplate看起来像那样

<ControlTemplate x:Key="TextBoxErrorTemplate">
  <TextBlock  Foreground="Orange" FontSize="12pt">Field can't be empty</TextBlock>
</ControlTemplate>

但是,如果发生验证错误,textBox会出现在textBox上 - 并且用户无法输入正确的值。有没有办法设置TextBlock的位置 - 显示错误信息的位置?

1 个答案:

答案 0 :(得分:2)

ErrorTemplates用于装饰控件而不是用于更改其内部属性,为此,您应该使用具有相应触发器的样式:

            <Style TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Setter Property="Foreground" Value="Orange"/>
                        <Setter Property="FontSize" Value="12"/>
                    </Trigger>
                </Style.Triggers>
            </Style>

如果您想显示一些文字,可以使用这样的模板:

    <ControlTemplate x:Key="TextBoxErrorTemplate">
        <StackPanel Orientation="Horizontal">
            <AdornedElementPlaceholder/>
            <TextBlock  Foreground="Orange" FontSize="12pt">Field can't be empty</TextBlock>
        </StackPanel>
    </ControlTemplate>

TextBlock将显示在TextBox的右侧。

如果您只想显示错误消息,我建议您设置TextBox的工具提示并将其绑定到验证错误。