[英]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.