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