Шаблоны ошибок проверки для UserControl

Я создал UserControl. Мне не нравится красная рамка, показывающая вокруг нее, когда происходят ошибки проверки. У меня есть текстовое поле внутри моего контроля.

Как я могу переопределить стиль ошибки проверки, чтобы избавиться от красной границы во всем элементе управления и просто показать красный фон в текстовом поле внутри моего usercontrol?

Спасибо!

Ответ 1

Я использую этот шаблон, который будет окрашивать фон текстового поля, а не показывать только границу.

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

Ответ 2

В стиле вашего пользовательского элемента управления:

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