You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:34:50