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

UWP如何访问已应用ControlTemplate的控件实例中的命名模板元素

UWP 获取CalendarViewDayItem模板内部元素的实现方法

你可以通过ControlTemplate.FindName()方法直接获取对应实例模板内的元素,这是UWP模板内元素访问的标准实现,完整代码如下:

private void myEvent(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
{
    CalendarViewDayItem dayItem = args.Item;
    // 强制应用模板,确保模板已经渲染到当前控件实例
    dayItem.ApplyTemplate();
    // 第二个参数必须传入当前的CalendarViewDayItem实例,匹配对应实例的可视化树
    Grid itemGrid = dayItem.Template.FindName("itemgrid", dayItem) as Grid;

    if (itemGrid != null)
    {
        // 此处执行你对itemgrid的业务逻辑
    }
    else
    {
        // 极端场景下模板未加载完成时,通过Loaded事件延迟获取
        RoutedEventHandler loadedHandler = null;
        loadedHandler = (s, e) =>
        {
            dayItem.Loaded -= loadedHandler;
            Grid targetGrid = dayItem.Template.FindName("itemgrid", dayItem) as Grid;
            if (targetGrid != null)
            {
                // 执行业务逻辑
            }
        };
        dayItem.Loaded += loadedHandler;
    }
}

注意事项

  • 不要直接修改CalendarViewDayItem.Template的静态内容,所有同类型控件共享同一个模板实例,直接修改会全局生效
  • 如果你的CalendarView开启了虚拟化,不要在该事件中做过重的计算操作,避免滑动卡顿
  • 如果你需要频繁访问该元素,也可以自定义附加属性,在CalendarViewDayItem的样式模板中直接把itemgrid绑定到附加属性上,后续直接读附加属性即可,不需要每次查找

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:03