无法屏蔽日历视图组件的整月和整年

问题描述 投票:0回答:1

我正在努力让我的 WinUI3 应用程序几个月甚至几年都处于停电状态,但目前我还无法做到。

我们的figma设计坚信,停电几个月和几年是对我们的应用程序最有帮助的补充,所以我真的很想交付它。

对于独特的奇数日子,我能够从

CalendarViewDayItem
中提取
CalendarView
子级并管理它们的
IsBlackout
属性,但发现没有任何名为
CalendarViewMonthYearItem
的月份或年份对象的子级。

我尝试过一个月和一年每天都黑屏,看看组件是否可以通过自动将几个月/几年的

IsBlackout
属性设置为 true 来巧妙地处理它,但情况似乎并非如此.

在检查了应用程序以更清楚地了解月份对象的呈现方式后,我还注意到它们被认为是

CalendarViewItem
对象,如下所示: VisualTree For MonthItems showing a lot of CalendarViewItems

接下来,我尝试在 CalendarView 组件中专门搜索该类型的子对象,但它似乎不是一个有效的可识别对象,如下所示: CalendarView autosuggest on visual studio not showing CalendarViewItem as an option

我现在已经没有想法了,我应该在这里做一些不同的事情吗?

windows winui-3 calendarview
1个回答
0
投票

不幸的是,没有简单的方法可以做到这一点。

让我向您展示一个有关将标题按钮涂黑的示例。

private void SetCalendarViewHeaderButton(CalendarView calendarView, bool isBlackout)
{
    if (calendarView.FindDescendant<Button>(x => x.Name is "HeaderButton") is not Button headerButton ||
        headerButton.Parent is not Grid parentGrid ||
        headerButton.FindDescendant<TextBlock>() is not TextBlock contentTextBlock)
    {
        return;
    }
        
    if (isBlackout is false)
    {
        if (parentGrid.Children.OfType<Line>().FirstOrDefault(x => x.Name is "HeaderButtonBlackoutLine") is Line currentBlackoutLine)
        {
            parentGrid.Children.Remove(currentBlackoutLine);
        }

        headerButton.IsEnabled = true;
        return;
    }

    Line newBlackoutLine = new()
    {
        Name = "HeaderButtonBlackoutLine",
        Stroke = new SolidColorBrush(Colors.DarkGray),
        StrokeThickness = 1,
    };

    newBlackoutLine.X1 = headerButton.Margin.Left + headerButton.Padding.Left;
    newBlackoutLine.X2 = newBlackoutLine.X1 + contentTextBlock.ActualWidth;
    newBlackoutLine.Y1 = headerButton.Margin.Top + headerButton.Padding.Top;
    newBlackoutLine.Y2 = newBlackoutLine.Y1 + contentTextBlock.ActualHeight;

    parentGrid.Children.Add(newBlackoutLine);
}
© www.soinside.com 2019 - 2024. All rights reserved.