更改CalendarViewDayItem日期编号(TextBlock)

时间:2018-01-28 05:37:33

标签: uwp uwp-xaml

我正在尝试使用UWP CalendarView获得此结果 enter image description here 我现在最大的问题是......如何更改CalendarViewDayItem内创建的“日期号”文本块的位置?

使用Visual Studio Live Visual Tree时,我可以看到CalendarViewDayItemTextBlock表示当月的日期编号,但我看不出如何更改它{{1} “Top”和Vertical VerticalAlignment到“Left

有人可以帮忙吗?

这是我的实际结果: 尝试将红色圆圈内的数字移动到框的顶部和左侧: enter image description here     

HorizontalAlignment

1 个答案:

答案 0 :(得分:1)

这是一个艰难的!似乎CalendarView在您CalendarViewDayItem旁边的Grid上添加了日标签。这在XAML Live Tree查看器中很明显:

The day TextBlock is next to the Grid

要掌握它,您需要使用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;
    }
}