首页 > 解决方案 > WPF中使用样式的边框粗细

问题描述

我正在做一个小项目,我正在使用数据验证。TextBox现在,当输入不正确时,我正在尝试为 制作样式。我想在TextBox和一个ToolTip带有错误消息的周围制作一个红色边框,这是我从 C# 代码返回的。

我开始制作红色边框。我在 XAML 中写了这个:

<Window.Resources>
   <Style x:Key="ErrorTemplate" TargetType="TextBox">
      <Style.Triggers>
         <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="BorderBrush" Value="Red"></Setter>
            <Setter Property="BorderThickness" Value="5"></Setter>
         </Trigger>
      </Style.Triggers>
   </Style>
</Window.Resources> 

但是如果我这样写,BorderThickness属性正在改变TextBox. 使用上面的代码,我得到了这个:

带有粗蓝色边框的文本框。

有没有办法避免这种情况,并得到这样的东西?

带有粗红色边框的目标文本框。

在某种程度上,我可以ToolTip使用相同的Style.


编辑:代码TextBox

<TextBox 
   Grid.Row="1"
   Grid.Column="3"
   Margin="10px"
   FontSize="14pt"
   VerticalAlignment="Center"
   Padding="5px"
   Text="{Binding Path=Name, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
   Style="{StaticResource ErrorTemplate}">
   <TextBox.DataContext>
      <local:Data/>
   </TextBox.DataContext>
</TextBox>

标签: c#wpfvalidationxaml

解决方案


你看到的蓝色边框就是它TextBox本身的边框,在它的键盘聚焦状态下默认是浅蓝色的。边框厚 5 度,因为您明确地将其设置为您提供的ErrorTemplate样式。它周围的红线是TextBox.

为了满足您的要求,请创建如下样式。

  • 设置一个一般Margin的 5 dips 来说明错误显示的边框,否则它可能会在容器之外被切断,因为它只是原始的覆盖TextBox并且没有调整大小。
  • 为非错误状态设置可选的默认工具提示。
  • 设置一个ErrorTemplate,这是一个专用于错误状态的特殊模板,其中AdornedElementPlaceholder表示模板中的原始TextBox
  • 设置一个触发器,将工具提示文本更改为错误状态下的验证错误。
<Style x:Key="MyTextBoxValidationStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
   <Setter Property="Margin" Value="5"/>
   <Setter Property="ToolTip" Value="There is no error."/>
   <Setter Property="Validation.ErrorTemplate">
      <Setter.Value>
         <ControlTemplate>
            <StackPanel>
               <Border BorderBrush="Red" BorderThickness="5">
                  <AdornedElementPlaceholder/>
               </Border>
            </StackPanel>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
   <Style.Triggers>
      <Trigger Property="Validation.HasError" Value="True">
         <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
      </Trigger>
   </Style.Triggers>
</Style>

将样式应用于您的TextBox使用Style属性。

<TextBox Style="{StaticResource MyTextBoxValidationStyle}" ...>

这是结果的示例屏幕截图。

TextBox 处于有效和无效状态。


推荐阅读