UserControl的验证错误模板

时间:2011-10-18 14:32:52

标签: wpf

我已经构建了一个UserControl。当验证错误发生时,我不喜欢它周围显示的红色边框。我的控件中有一个文本框。

如何覆盖验证错误样式以消除整个控件中的红色边框,并在usercontrol中的文本框中显示红色背景?

谢谢!

2 个答案:

答案 0 :(得分:5)

我正在使用此模板,它将为文本框的背景着色,而不是仅显示边框。

 <UserControl.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true" >
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="Background" Value="MistyRose"/>
                <Setter Property="BorderBrush" Value="Red"/>
                <Setter Property="BorderThickness" Value="1.0"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource 
                 Self},Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

所有我必须对你的DocPannel进行操作如果我在DockPanel中找到控件的位置,那么我必须将其Validation.Error模板设置为空,否则将删除边框。

对于Ex:

    <TextBox >
       <Validation.ErrorTemplate>
         <ControlTemplate>
         </ControlTemplate>
       </Validation.ErrorTemplate>
     </TextBox>

答案 1 :(得分:0)

在用户控件的样式上:

<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>

关于文本框的样式:

<Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBoxBase}">
                <Border 
                      Name="Border"
                      CornerRadius="5" 
                      Padding="2"
                      BorderBrush="{TemplateBinding BorderBrush}"
                      Background="{TemplateBinding Background}"
                      BorderThickness="{TemplateBinding BorderThickness}" >
                    <ScrollViewer Margin="0"  x:Name="PART_ContentHost"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="Border" Property="Background" Value="LightGray"/>
                        <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                        <Setter Property="Foreground" Value="Gray"/>
                    </Trigger>
                    <Trigger Property="Validation.HasError" Value="true">
                        <Setter Property="BorderBrush" TargetName="Border" Value="{DynamicResource ErrorBorderColor}"/>
                        <Setter Property="Background" TargetName="Border" Value="{DynamicResource ErrorBackgroundColor}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>