我正在努力让我的 WinUI3 应用程序几个月甚至几年都处于停电状态,但目前我还无法做到。
我们的figma设计坚信,停电几个月和几年是对我们的应用程序最有帮助的补充,所以我真的很想交付它。
对于独特的奇数日子,我能够从
CalendarViewDayItem
中提取 CalendarView
子级并管理它们的 IsBlackout
属性,但发现没有任何名为 CalendarViewMonthYearItem
的月份或年份对象的子级。
我尝试过一个月和一年每天都黑屏,看看组件是否可以通过自动将几个月/几年的
IsBlackout
属性设置为 true 来巧妙地处理它,但情况似乎并非如此.
在检查了应用程序以更清楚地了解月份对象的呈现方式后,我还注意到它们被认为是
CalendarViewItem
对象,如下所示:
接下来,我尝试在 CalendarView 组件中专门搜索该类型的子对象,但它似乎不是一个有效的可识别对象,如下所示:
我现在已经没有想法了,我应该在这里做一些不同的事情吗?
不幸的是,没有简单的方法可以做到这一点。
让我向您展示一个有关将标题按钮涂黑的示例。
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);
}