Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中使用样式的边框厚度_C#_Wpf_Validation_Xaml - Fatal编程技术网

C# WPF中使用样式的边框厚度

C# WPF中使用样式的边框厚度,c#,wpf,validation,xaml,C#,Wpf,Validation,Xaml,我正在做一个小项目,在其中我使用数据验证。现在,当输入不正确时,我尝试为TextBox创建样式。我想在文本框周围画一个红色边框,并用C代码返回一条错误消息作为工具提示 我从制作红色边框开始。我用XAML写了这个: <Window.Resources> <Style x:Key="ErrorTemplate" TargetType="TextBox"> <Style.Triggers>

我正在做一个小项目,在其中我使用数据验证。现在,当输入不正确时,我尝试为TextBox创建样式。我想在文本框周围画一个红色边框,并用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> 

您看到的蓝色边框是文本框本身的边框,默认情况下,在键盘聚焦状态下为浅蓝色。边框的厚度为5度,因为您在提供的ErrorTemplate样式中显式设置了边框。它周围的红线是文本框的默认错误模板

为了满足您的需求,创建如下样式

将常规边距设置为5度,以说明错误时显示的边框,否则它可能会在容器外部被切断,因为它只是原始文本框上的一个覆盖,并且没有调整大小。 为非错误状态设置可选的默认工具提示。 设置ErrorTemplate,这是一个专用于错误状态的特殊模板,其中AdorneDeletePlaceholder表示模板中的原始文本框。 设置将工具提示文本更改为错误状态下的验证错误的触发器。 下面是结果的示例屏幕截图


您看到的蓝色边框是文本框本身的边框,默认情况下,在键盘聚焦状态下为浅蓝色。边框的厚度为5度,因为您在提供的ErrorTemplate样式中显式设置了边框。它周围的红线是文本框的默认错误模板

为了满足您的需求,创建如下样式

将常规边距设置为5度,以说明错误时显示的边框,否则它可能会在容器外部被切断,因为它只是原始文本框上的一个覆盖,并且没有调整大小。 为非错误状态设置可选的默认工具提示。 设置ErrorTemplate,这是一个专用于错误状态的特殊模板,其中AdorneDeletePlaceholder表示模板中的原始文本框。 设置将工具提示文本更改为错误状态下的验证错误的触发器。 下面是结果的示例屏幕截图


我有点困惑。您的示例中的borderbrush为红色,而您的示例中的borderbrush为蓝色。在我看来,如果出现其他颜色,是因为您在XAML中的其他地方定义了边距/填充,并使用了一些背景色。您可以发布使用此样式的文本框代码吗?@ilankshet这就是问题所在。我定义,边框刷是红色的,但当文本框处于焦点时,它会添加蓝色边框。若我增加BorderThickness,它会向内增加蓝色边框的厚度,这会使文本框的文本字段中的边框变厚itself@FelixCastor我有点困惑。您的示例中的borderbrush为红色,而您的示例中的borderbrush为蓝色。在我看来,如果出现其他颜色,是因为您在XAML中的其他地方定义了边距/填充,并使用了一些背景色。您可以发布使用此样式的文本框代码吗?@ilankshet这就是问题所在。我定义,边框刷是红色的,但当文本框处于焦点时,它会添加蓝色边框。若我增加BorderThickness,它会向内增加蓝色边框的厚度,这会使文本框的文本字段中的边框变厚itself@FelixCastor代码补充:非常感谢!这就成功了。这里有人试图说服我,文本框根本没有蓝色边框:非常感谢!这就成功了。这里有人试图说服我,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>
<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="{StaticResource MyTextBoxValidationStyle}" ...>