UWP XAML中缩小DatePicker宽度无内容截断的正确设置方法问询
UWP XAML DatePicker控件宽度设置指南
问题复现
直接给DatePicker设置固定Width属性会导致内部按钮内容被截断,示例代码如下:
<DatePicker x:Name="birthDatePicker" Width="200" Header="出生日期"/>
截断效果:
问题原因
UWP DatePicker内部有默认的最小渲染宽度,且内部日期文本区域的长度是按系统默认日期格式预留的。硬设固定Width时,如果控件总宽度减去边框、内边距后,剩余可用宽度小于日期文本的渲染需求,就会出现内容截断。
正确设置方案
方案1:自适应宽度(最推荐)
放弃固定Width,改用MinWidth+MaxWidth组合设置,既可以控制控件的尺寸范围,又能让内容自适应避免截断:
<!-- 最小宽度200,最大宽度300,内容长度在范围内时自动适配 --> <DatePicker x:Name="birthDatePicker" MinWidth="200" MaxWidth="300" Header="出生日期"/>
方案2:固定宽度+自定义控件模板
如果业务需要固定宽度,可以修改DatePicker的默认模板,调大内部文本区域的可用宽度:
- 先在页面资源中添加自定义样式:
<Page.Resources> <Style TargetType="DatePicker"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DatePicker"> <StackPanel> <ContentPresenter Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" Margin="0,0,0,8"/> <Button x:Name="FlyoutButton" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="0"> <DatePickerTextBox x:Name="PART_DatePickerTextBox" Padding="6,0" MinWidth="180"/> </Button> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </Page.Resources>
- 再设置固定Width即可:
<DatePicker x:Name="birthDatePicker" Width="200" Header="出生日期"/>
方案3:缩短日期显示格式
调整日期的显示规则,将长文本替换为缩写,降低内容所需的宽度:
<DatePicker x:Name="birthDatePicker" Width="200" Header="出生日期" DayFormat="{}{day.integer}" MonthFormat="{}{month.abbreviated(3)}" YearFormat="{}{year.full(4)}"/>
该方案会把月份显示为3位缩写,大幅缩短整体文本长度,适配固定宽度的需求。
内容的提问来源于stack exchange,提问作者gunturu mahesh
相关产品推荐
相关产品推荐

