如何在C# WPF中垂直居中DatePicker文本框内的文本?
WPF DatePicker文本垂直居中解决方案
要解决DatePicker文本框内文本垂直居中的问题,直接设置VerticalAlignment和VerticalContentAlignment无效的核心原因是:DatePickerTextBox的默认模板中,内部的PART_TextBox控件没有继承这些对齐属性。以下是两种可行的解决方法:
方法一:调整Padding实现快速居中
根据字体大小和控件高度,手动计算上下内边距,让文本自然垂直居中。针对你当前FontSize=16、Height=28的场景,设置上下Padding为2即可:
<DatePicker x:Name="DatePicker01" SelectedDateFormat="Long" Height="30" FontFamily="Calibri" FontSize="16" FontWeight="Regular" TabIndex="1" BorderBrush="#162D2D" Foreground="#D9D9D9" Padding="0,0,0,0" Margin="0,0,0,15"> <DatePicker.Resources> <Style TargetType="{x:Type DatePickerTextBox}"> <Setter Property="Text" Value="Select Entry Date"/> <!-- 调整上下内边距,使文本垂直居中 --> <Setter Property="Padding" Value="0,2,0,2"/> <Setter Property="Background" Value="#FF162D2D"/> <Setter Property="Height" Value="28"/> <Setter Property="TextAlignment" Value="Center"/> </Style> </DatePicker.Resources> </DatePicker>
方法二:重写模板,强制内部TextBox对齐
通过修改DatePickerTextBox的控件模板,直接对内部的PART_TextBox设置VerticalContentAlignment="Center",确保对齐属性生效,适配动态变化的控件尺寸:
<DatePicker x:Name="DatePicker01" SelectedDateFormat="Long" Height="30" FontFamily="Calibri" FontSize="16" FontWeight="Regular" TabIndex="1" BorderBrush="#162D2D" Foreground="#D9D9D9" Padding="0,0,0,0" Margin="0,0,0,15"> <DatePicker.Resources> <Style TargetType="{x:Type DatePickerTextBox}"> <Setter Property="Text" Value="Select Entry Date"/> <Setter Property="Padding" Value="0,0,0,0"/> <Setter Property="Background" Value="#FF162D2D"/> <Setter Property="Height" Value="28"/> <Setter Property="TextAlignment" Value="Center"/> <!-- 重写模板,指定内部TextBox的垂直内容对齐 --> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DatePickerTextBox}"> <Grid> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"/> <TextBox x:Name="PART_TextBox" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{TemplateBinding Text}" TextAlignment="{TemplateBinding TextAlignment}" Background="Transparent" BorderThickness="0"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </DatePicker.Resources> </DatePicker>
补充说明
- 方法一适合固定字体大小和控件高度的场景,操作简单;
- 方法二更灵活,即使控件尺寸动态变化,也能保持文本垂直居中。
内容的提问来源于stack exchange,提问作者Athang Tikekar
相关产品推荐
相关产品推荐

