Browse Source

Add weeknumber header and also add a sample to ControlCatalog

pull/21311/head
timunie 4 weeks ago
parent
commit
ccbe94a4e2
  1. 6
      samples/ControlCatalog/Pages/CalendarPage.xaml
  2. 18
      src/Avalonia.Controls/Calendar/Calendar.cs
  3. 3
      src/Avalonia.Controls/Calendar/CalendarItem.cs
  4. 15
      tests/Avalonia.Controls.UnitTests/CalendarTests.cs

6
samples/ControlCatalog/Pages/CalendarPage.xaml

@ -48,6 +48,12 @@
<Calendar Name="BlackoutDatesCalendar"
SelectionMode="SingleDate" />
</StackPanel>
<StackPanel>
<TextBlock Text="Weeknumbers"/>
<Calendar SelectionMode="SingleDate"
ShowWeekNumbers="True"
WeekNumberHeader="CW" />
</StackPanel>
</WrapPanel>
</StackPanel>
</ContentPage>

18
src/Avalonia.Controls/Calendar/Calendar.cs

@ -386,6 +386,23 @@ namespace Avalonia.Controls
set => SetValue(WeekNumberRuleProperty, value);
}
/// <summary>
/// Defines the <see cref="WeekNumberHeader"/> property.
/// </summary>
public static readonly StyledProperty<object?> WeekNumberHeaderProperty =
AvaloniaProperty.Register<Calendar, object?>(nameof(WeekNumberHeader));
/// <summary>
/// Gets or sets the content displayed in the week-number column header cell.
/// Set this to a localized string such as <c>"CW"</c>, <c>"KW"</c>, or <c>"Wk"</c>
/// to give users context for the week-number column. Defaults to <c>null</c> (blank).
/// </summary>
public object? WeekNumberHeader
{
get => GetValue(WeekNumberHeaderProperty);
set => SetValue(WeekNumberHeaderProperty, value);
}
public static readonly StyledProperty<CalendarMode> DisplayModeProperty =
AvaloniaProperty.Register<Calendar, CalendarMode>(
nameof(DisplayMode),
@ -2244,6 +2261,7 @@ namespace Avalonia.Controls
DisplayDateEndProperty.Changed.AddClassHandler<Calendar>((x, e) => x.OnDisplayDateEndChanged(e));
ShowWeekNumbersProperty.Changed.AddClassHandler<Calendar>((x, _) => x.UpdateMonths());
WeekNumberRuleProperty.Changed.AddClassHandler<Calendar>((x, _) => x.UpdateMonths());
WeekNumberHeaderProperty.Changed.AddClassHandler<Calendar>((x, _) => x.UpdateMonths());
KeyDownEvent.AddClassHandler<Calendar>((x, e) => x.Calendar_KeyDown(e));
KeyUpEvent.AddClassHandler<Calendar>((x, e) => x.Calendar_KeyUp(e));
}

3
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()

15
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]

Loading…
Cancel
Save