diff --git a/samples/ControlCatalog/Pages/CalendarPage.xaml b/samples/ControlCatalog/Pages/CalendarPage.xaml index 99727e9124..cecb497bdf 100644 --- a/samples/ControlCatalog/Pages/CalendarPage.xaml +++ b/samples/ControlCatalog/Pages/CalendarPage.xaml @@ -48,6 +48,12 @@ + + + + diff --git a/src/Avalonia.Controls/Calendar/Calendar.cs b/src/Avalonia.Controls/Calendar/Calendar.cs index 0f99a0cc2a..b5f0795be7 100644 --- a/src/Avalonia.Controls/Calendar/Calendar.cs +++ b/src/Avalonia.Controls/Calendar/Calendar.cs @@ -386,6 +386,23 @@ namespace Avalonia.Controls set => SetValue(WeekNumberRuleProperty, value); } + /// + /// Defines the property. + /// + public static readonly StyledProperty WeekNumberHeaderProperty = + AvaloniaProperty.Register(nameof(WeekNumberHeader)); + + /// + /// Gets or sets the content displayed in the week-number column header cell. + /// Set this to a localized string such as "CW", "KW", or "Wk" + /// to give users context for the week-number column. Defaults to null (blank). + /// + public object? WeekNumberHeader + { + get => GetValue(WeekNumberHeaderProperty); + set => SetValue(WeekNumberHeaderProperty, value); + } + public static readonly StyledProperty DisplayModeProperty = AvaloniaProperty.Register( nameof(DisplayMode), @@ -2244,6 +2261,7 @@ namespace Avalonia.Controls DisplayDateEndProperty.Changed.AddClassHandler((x, e) => x.OnDisplayDateEndChanged(e)); ShowWeekNumbersProperty.Changed.AddClassHandler((x, _) => x.UpdateMonths()); WeekNumberRuleProperty.Changed.AddClassHandler((x, _) => x.UpdateMonths()); + WeekNumberHeaderProperty.Changed.AddClassHandler((x, _) => x.UpdateMonths()); KeyDownEvent.AddClassHandler((x, e) => x.Calendar_KeyDown(e)); KeyUpEvent.AddClassHandler((x, e) => x.Calendar_KeyUp(e)); } diff --git a/src/Avalonia.Controls/Calendar/CalendarItem.cs b/src/Avalonia.Controls/Calendar/CalendarItem.cs index 6d577d6ed0..9806140275 100644 --- a/src/Avalonia.Controls/Calendar/CalendarItem.cs +++ b/src/Avalonia.Controls/Calendar/CalendarItem.cs @@ -639,7 +639,10 @@ namespace Avalonia.Controls.Primitives } if (_weekNumberHeaderLabel != null) + { + _weekNumberHeaderLabel.Content = Owner?.WeekNumberHeader; _weekNumberHeaderLabel.IsVisible = show; + } } internal void UpdateYearMode() diff --git a/tests/Avalonia.Controls.UnitTests/CalendarTests.cs b/tests/Avalonia.Controls.UnitTests/CalendarTests.cs index 1dab350ab6..05cf095340 100644 --- a/tests/Avalonia.Controls.UnitTests/CalendarTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CalendarTests.cs @@ -441,6 +441,21 @@ namespace Avalonia.Controls.UnitTests Assert.False((bool)field.GetValue(calendarItem)!); } + [Fact] + public void WeekNumberHeader_Defaults_To_Null() + { + var calendar = new Calendar(); + Assert.Null(calendar.WeekNumberHeader); + } + + [Fact] + public void WeekNumberHeader_Can_Be_Set_To_String() + { + var calendar = new Calendar(); + calendar.WeekNumberHeader = "CW"; + Assert.Equal("CW", calendar.WeekNumberHeader); + } + // --- Week number tests --- [Fact]