无法使用UpdateLayout()[UWP]

时间:2017-08-17 13:50:15

标签: c# xaml uwp uwp-xaml calendarview

在我的UWP应用中,如果用户点击按钮,我尝试刷新calendarview上的密度条,问题是,虽然calendarView.UpdateLayout();应该重新运行{ {1}}事件,仅在第一次加载CalendarViewDayItemChanging时运行。难道我做错了什么?

CalendarView

1 个答案:

答案 0 :(得分:2)

UpdateLayout此处不会执行任何操作,因为没有布局更新,只有当您移动到另一个日历视图时才会触发CalendarViewDayItemChanging

在您的情况下,您只需手动找到所有CalendarViewDayItems并在现有视图上更新其颜色。

首先,创建一些Children扩展方法,以帮助检索所有相同类型的子项。

public static class Helper
{
    public static List<FrameworkElement> Children(this DependencyObject parent)
    {
        var list = new List<FrameworkElement>();

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);

            if (child is FrameworkElement)
            {
                list.Add(child as FrameworkElement);
            }

            list.AddRange(Children(child));
        }

        return list;
    }
}

然后,只需在你的按钮点击处理程序中调用它来获取所有CalendarViewDayItem,然后循环它们并相应地设置每个颜色。

var dayItems = calendarView.Children().OfType<CalendarViewDayItem>();
foreach (var dayItem in dayItems)
{
    dayItem.SetDensityColors(densityColors);
}

请注意,您无需担心新的CalendarViewDayItem会进入视图,因为它们将由您的CalendarView_CalendarViewDayItemChanging回调处理。