Шаблоны ошибок проверки для 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>