我正在尝试使用UWP CalendarView获得此结果
我现在最大的问题是......如何更改CalendarViewDayItem
内创建的“日期号”文本块的位置?
使用Visual Studio Live Visual Tree时,我可以看到CalendarViewDayItem
有TextBlock
表示当月的日期编号,但我看不出如何更改它{{1} “Top”和Vertical VerticalAlignment
到“Left
有人可以帮忙吗?
这是我的实际结果: 尝试将红色圆圈内的数字移动到框的顶部和左侧:
HorizontalAlignment
答案 0 :(得分:1)
这是一个艰难的!似乎CalendarView
在您CalendarViewDayItem
旁边的Grid
上添加了日标签。这在XAML Live Tree查看器中很明显:
要掌握它,您需要使用CalendarViewDayItemChanging
并实施帮助方法,以便在TextBlock
中找到CalendarViewDayItem
。
VisualTreeHelper
使您能够遍历控制树,并且包括获取给定DependencyObject
的子项的能力。然后我们可以简单地实现一个帮助器方法,它将找到给定类型的第一个直接子节点:
private T FindFirstChildOfType<T>(DependencyObject control) where T : DependencyObject
{
var childrenCount = VisualTreeHelper.GetChildrenCount(control);
for (int childIndex = 0; childIndex < childrenCount; childIndex++)
{
var child = VisualTreeHelper.GetChild(control, childIndex);
if ( child is T typedChild)
{
return typedChild;
}
}
return null;
}
现在,有了这种方法,我们将转到我们的TextBlock
并按照我们的要求对齐它!
private void CalendarView_OnCalendarViewDayItemChanging(
CalendarView sender,
CalendarViewDayItemChangingEventArgs args)
{
var textBlock = FindFirstChildOfType<TextBlock>(args.Item);
if (textBlock != null)
{
textBlock.HorizontalAlignment = HorizontalAlignment.Left;
textBlock.VerticalAlignment = VerticalAlignment.Top;
}
}