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

UWP应用中如何增大CalendarDatePicker选中日期的字体大小

解决UWP CalendarDatePicker选中日期字体大小无法修改的问题

嘿,我之前也踩过这个坑!你会发现直接设置CalendarDatePicker的FontSize根本不会影响选中日期的显示——这是因为控件模板里负责展示选中日期的是一个名为TextBox的内部控件,它的字体大小默认没有继承外层的FontSize属性,而是用了模板里的固定值。

不用全量重写整个控件样式,有两个简单的方法可以解决:

方法1:通过样式修改(推荐)

这种方法更符合UWP的样式设计规范,而且不需要写后台代码。你只需要基于默认样式创建一个自定义样式,单独给内部的TextBox设置字体大小即可:

<Page.Resources>
    <!-- 基于默认样式创建自定义样式 -->
    <Style x:Key="LargeFontCalendarDatePickerStyle" 
           BasedOn="{StaticResource CalendarDatePickerStyle}" 
           TargetType="CalendarDatePicker">
        <!-- 针对内部TextBox控件设置字体大小 -->
        <Setter TargetName="TextBox" Property="FontSize" Value="24"/>
    </Style>
</Page.Resources>

<!-- 使用自定义样式的CalendarDatePicker -->
<CalendarDatePicker Style="{StaticResource LargeFontCalendarDatePickerStyle}"
                    PlaceholderText="选择日期"/>

这个方法的好处是完全依赖UWP的样式系统,不会因为控件内部结构变化而失效,维护起来更省心。

方法2:通过视觉树找到内部TextBox(后台代码方式)

如果你更倾向于用代码控制,可以在控件加载后,通过VisualTreeHelper遍历视觉树找到内部的TextBox,然后直接设置它的FontSize:

首先写一个通用的视觉树查找辅助方法:

private T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject
{
    if (parent == null) return null;

    T foundChild = null;
    int childCount = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < childCount; i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        if (child is T typedChild)
        {
            if (!string.IsNullOrEmpty(childName))
            {
                if ((child as FrameworkElement)?.Name == childName)
                {
                    foundChild = typedChild;
                    break;
                }
            }
            else
            {
                foundChild = typedChild;
                break;
            }
        }
        // 递归查找子元素
        foundChild = FindChild<T>(child, childName);
        if (foundChild != null) break;
    }
    return foundChild;
}

然后在CalendarDatePicker的Loaded事件中调用这个方法:

private void CalendarDatePicker_Loaded(object sender, RoutedEventArgs e)
{
    var datePicker = sender as CalendarDatePicker;
    var innerTextBox = FindChild<TextBox>(datePicker, "TextBox");
    if (innerTextBox != null)
    {
        innerTextBox.FontSize = 24; // 设置你需要的字体大小
    }
}

记得在XAML里给控件绑定Loaded事件:

<CalendarDatePicker Loaded="CalendarDatePicker_Loaded" PlaceholderText="选择日期"/>

不过要注意,这种方法依赖控件内部的命名结构,如果微软后续修改了CalendarDatePicker的模板,可能会失效,所以优先推荐方法1。

内容的提问来源于stack exchange,提问作者slayernoah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:24:26