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

WPF中DatePicker文本框内文字无法居中对齐的问题求助

WPF中DatePicker文本框内文字无法居中对齐的问题求助

嘿,我太懂你这种卡壳的感觉了!你用WPF做DatePicker的时候,文本框里的提示文字和选中的日期都没法居中,对吧?看了你贴的代码,问题出在DatePickerTextBox的默认模板上——它内部的文本容器默认不是居中布局的,光瞎调外面的属性根本没用。

给你个直接能用的修改方案,你把原来的DatePickerTextBox的Style改成下面这样就行:

<DatePicker x:Name="DatePicker1" Margin="0,128,0,0" SelectedDateFormat="Long" HorizontalAlignment="Center" VerticalAlignment="Top" Height="30" Width="250" FontFamily="Calibri" FontSize="16" FontWeight="Regular" TabIndex="1" BorderBrush="#162D2D" Foreground="#D9D9D9" Padding="0,0,0,0">
    <DatePicker.Resources>
        <Style TargetType="{x:Type DatePickerTextBox}">
            <Setter Property="Text" Value="Select Buy Date"/>
            <Setter Property="Padding" Value="0,2,0,0"/>
            <Setter Property="Background" Value="#FF162D2D"/>
            <!-- 强制文本本身居中对齐 -->
            <Setter Property="TextAlignment" Value="Center"/>
            <!-- 重写模板,让内部的文本容器也居中 -->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DatePickerTextBox}">
                        <Grid>
                            <Border x:Name="PART_ContentHost" 
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"/>
                            <ScrollViewer x:Name="PART_TextBox" 
                                          HorizontalAlignment="Center"
                                          VerticalAlignment="Center"
                                          Padding="{TemplateBinding Padding}"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DatePicker.Resources>
</DatePicker>

我给你拆解下关键改动:

  1. 新增了TextAlignment="Center"的Setter,直接让文本内容本身居中;
  2. 重写了DatePickerTextBox的ControlTemplate,把内部承载文本的ScrollViewer设置为水平垂直居中,这样不管是默认的提示文字,还是你选中后的日期,都会乖乖待在文本框中间了。

对了,你原来代码里的Background值#FF162D...没写完,我给补成了#FF162D2D,你可以根据自己的需求改成对应的颜色哈。

备注:内容来源于stack exchange,提问作者Athang Tikekar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:04:52