簡體   English   中英

在 WPF 中使用樣式的邊框粗細

[英]Border thickness using style in 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內邊框厚度。 使用上面的代碼,我得到了這個:

帶有粗藍色邊框的文本框。

有沒有辦法避免這種情況,並得到這樣的東西?

目標文本框帶有粗紅色邊框。

在某種程度上,我可以使用相同的Style添加那個ToolTip


編輯: 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>

您看到的藍色邊框是TextBox本身的邊框,在鍵盤聚焦狀態下默認為淺藍色。 邊框的厚度為 5 傾角,因為您在提供的ErrorTemplate樣式中明確設置了它。 它周圍的紅線是TextBox的默認錯誤模板。

為了滿足您的要求,請創建如下樣式。

  • 將一般Margin設置為 5 傾角以說明錯誤時顯示的邊框,否則它可能會在容器外被切斷,因為它只是原始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>

使用Style屬性將Style應用到您的TextBox

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

這是結果的示例屏幕截圖。

文本框處於有效和無效狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM