【WPF】TextBox样式重写注意事项
1、普通控件重写需要添加一行
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="{TemplateBinding Padding}"></ContentPresenter>
2、TextBox之类的编辑控件重写,需要填加一行
<ScrollViewer x:Name="PART_ContentHost"></ScrollViewer>
只有这样才能进入编辑模式
举个栗子:
<ControlTemplate x:Key="RoundTextBoxTemplate" TargetType="TextBox"> <Border CornerRadius="5" BorderBrush="LightSkyBlue" BorderThickness="2" Background="{TemplateBinding Background}" Margin="3"> <ScrollViewer x:Name="PART_ContentHost"></ScrollViewer> </Border> </ControlTemplate> <Style x:Key="RoundTextBoxStyle" TargetType="TextBox"> <Setter Property="Template" Value="{DynamicResource ResourceKey=RoundTextBoxTemplate}" ></Setter> </Style>
上面就是实现最简单的TextBox重写样式的功能了
下面记录一个圆角文本框外带提示信息的功能:2021-06-07
<TextBox MinWidth="100" MinHeight="30"> <TextBox.Resources> <VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left"> <VisualBrush.Visual> <TextBlock FontStyle="Italic" Text="请输入文本"/> </VisualBrush.Visual> </VisualBrush> </TextBox.Resources> <TextBox.Style> <Style TargetType="TextBox"> <Style.Setters> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Border x:Name="border" CornerRadius="5" BorderThickness="2" BorderBrush="Red"> <TextBox Name="txt" VerticalAlignment="Center" BorderThickness="0" BorderBrush="{x:Null}" Background="{x:Null}"></TextBox> </Border> <ControlTemplate.Triggers> <Trigger SourceName="txt" Property="Text" Value="{x:Null}"> <Setter TargetName="border" Property="Background" Value="{StaticResource HintText}"/> </Trigger> <Trigger SourceName="txt" Property="Text" Value=""> <Setter TargetName="border" Property="Background" Value="{StaticResource HintText}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style.Setters> </Style> </TextBox.Style> </TextBox>
这样也可以实现:
<TextBox Width="200" Height="30" VerticalContentAlignment="Center"> <TextBox.Resources> <VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left"> <VisualBrush.Visual> <TextBlock FontStyle="Italic" Text="提示文字"/> </VisualBrush.Visual> </VisualBrush> <Style TargetType="Border"> <Setter Property="CornerRadius" Value="5"></Setter> <Setter Property="BorderThickness" Value="2"></Setter> <Setter Property="BorderBrush" Value="Red"></Setter> </Style> </TextBox.Resources> <TextBox.Style> <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="Text" Value="{x:Null}"> <Setter Property="Background" Value="{StaticResource HintText}"/> </Trigger> <Trigger Property="Text" Value=""> <Setter Property="Background" Value="{StaticResource HintText}"/> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox>