Я реализую пользовательский элемент управления на основе CalendarView
, и сегодня у меня проходит нежелательная линия зачеркивания, например:
Мой CalendarViewDayItemStyle
определяется следующим образом:
<CalendarView.CalendarViewDayItemStyle>
<Style TargetType = "CalendarViewDayItem">
<Setter Property = "FontSize" Value = "12" />
<Setter Property = "FontWeight" Value = "ExtraLight" />
<Setter Property = "Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<StackPanel VerticalAlignment = "Bottom">
<Grid
Padding = "5"
Margin = "4,0,4,4"
VerticalAlignment = "Bottom">
<Grid.Background>
<SolidColorBrush Color = "{Binding RegularSeasonMarkerColor.Color}" Opacity = "1"></SolidColorBrush>
</Grid.Background>
<TextBlock Text = "{Binding RegularSeasonText}" TextDecorations = "None"></TextBlock>
</Grid>
<Grid
Padding = "5"
Margin = "4,0,4,0"
VerticalAlignment = "Bottom">
<Grid.Background>
<SolidColorBrush Color = "{Binding CSRSeasonMarkerColor.Color}" Opacity = ".3"></SolidColorBrush>
</Grid.Background>
<TextBlock Text = "{Binding CSRSeasonText}" TextDecorations = "None"></TextBlock>
</Grid>
</StackPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</CalendarView.CalendarViewDayItemStyle>
Как я могу удалить зачеркивание, не меняя при этом IsTodayHighlighted
, что также приведет к удалению выделения текущего дня?
РЕДАКТИРОВАНИЕ (20.06.2024): Вот начальная конфигурация CalendarView
:
<CalendarView
x:Name = "CalendarViewControl"
IsTodayHighlighted = "true"
HorizontalAlignment = "Stretch"
VerticalAlignment = "Stretch"
CalendarItemBorderBrush = "DimGray"
CalendarItemBorderThickness = "1"
CalendarItemCornerRadius = "0"
BlackoutStrikethroughBrush = "Transparent"
BlackoutBackground = "#5B6163"
BlackoutForeground = "#2F2F2F"
DayItemFontSize = "{StaticResource BodyTextBlockFontSize}"
DayItemMargin = "4,0,0,0"
IsGroupLabelVisible = "True"
FirstOfMonthLabelFontSize = "{StaticResource BodyTextBlockFontSize}"
FirstOfMonthLabelFontWeight = "Bold"
HorizontalFirstOfMonthLabelAlignment = "Right"
FirstOfMonthLabelMargin = "0,0,4,0"
DayItemFontWeight = "SemiBold"
FirstDayOfWeek = "Monday"
HorizontalDayItemAlignment = "Left"
VerticalDayItemAlignment = "Top">
То же самое. Я вставил ваш xaml в стандартный CalendarView
и не воспроизвел вашу проблему.
@YangXiaoPo-MSFT и Эндрю — я обновил пост конфигурацией элемента управления CalendarView
. Может быть полезно попытаться воспроизвести такое поведение.
Странный. Я использовал оба вашего кода, но все еще не могу воспроизвести строку. Можете ли вы воспроизвести это в простом проекте приложения WinUI?
Интересно, это как-то связано с темной темой? @YangXiaoPo-MSFT и Эндрю — попробуйте включить дни отключения (сегодня тоже день отключения) и посмотрите, воспроизводится ли это. На скриншоте выше я вижу, что они не включены.
У CalendarView
есть
но у него нет
Чтобы удалить зачеркнутые линии затемнения, вы можете установить
<CalendarView BlackoutStrikethroughBrush = "Transparent" .../>
А вот с предметом на сегодня это нужно сделать вручную. По крайней мере на данный момент. Например:
private void CalendarViewControl_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
{
if (args.Item.Date.Date != DateTime.Now.Date ||
args.Item.FindDescendant<Line>() is not Line todayItemBlackoutLine)
{
return;
}
todayItemBlackoutLine.Visibility = Visibility.Collapsed;
}
FindDescendant()
происходит из пакета NuGet CommunityToolkit.WinUI.Extensions.
Хаки, но я думаю, что это может сработать. Мне также каким-то образом удалось установить передний план (TodayForeground
) на Transparent
, и он исчез, так что это другой подход.