AngelSix.ThemeEngine.Controls
1.1.0
dotnet add package AngelSix.ThemeEngine.Controls --version 1.1.0
NuGet\Install-Package AngelSix.ThemeEngine.Controls -Version 1.1.0
<PackageReference Include="AngelSix.ThemeEngine.Controls" Version="1.1.0" />
<PackageVersion Include="AngelSix.ThemeEngine.Controls" Version="1.1.0" />
<PackageReference Include="AngelSix.ThemeEngine.Controls" />
paket add AngelSix.ThemeEngine.Controls --version 1.1.0
#r "nuget: AngelSix.ThemeEngine.Controls, 1.1.0"
#:package AngelSix.ThemeEngine.Controls@1.1.0
#addin nuget:?package=AngelSix.ThemeEngine.Controls&version=1.1.0
#tool nuget:?package=AngelSix.ThemeEngine.Controls&version=1.1.0
AngelSix.ThemeEngine.Controls
Avalonia controls that ship as types only — no styling of their own. Appearance is deliberately left to the consuming theme, exactly the way first-party Avalonia controls work: the types live in the framework, and the look arrives from whichever theme package you install.
Currently shipping:
CalendarView— a single-control calendar replacing Avalonia's five-part built-in family (Calendar,CalendarItem,CalendarDayButton,CalendarButton,CalendarDatePicker). Inline month view with month/year/decade zoom, single or range selection with a hover preview band, event-dot markers, full keyboard navigation, and an optional picker presentation (text box + popup) driven by the same control.CalendarSelectionEngine— the pure selection/layout logic behindCalendarView(range state machine, month-grid date maths, header text), kept free of any UI type so it can be unit-tested.
Install
dotnet add package AngelSix.ThemeEngine.Controls
Then reference the namespace in your XAML:
<Window xmlns="https://github.com/avaloniaui"
xmlns:controls="using:AngelSix.ThemeEngine.Controls">
<controls:CalendarView />
<controls:CalendarView SelectionMode="Range" />
<controls:CalendarView DisplayAsPicker="True" />
</Window>
Styling
The control paints nothing itself. Every visual detail reaches it through pseudo-classes (:today, :selected, :inactive, :blackout, :range-start, :range-end, :in-range, :preview, :day-focused, plus :picker, :open, :year, :decade on the calendar) and templated parts (PART_HeaderButton, PART_PreviousButton, PART_NextButton, PART_DayTitles, PART_MonthGrid, PART_ZoomGrid, PART_TextBox, PART_PickerButton, PART_Popup), so a theme styles it with an ordinary <ControlTheme TargetType="CalendarView"> — the same shape used for every stock Avalonia control. See Avalonia.Themes.Prototype/Controls/CalendarView.axaml in the youtube repo for a complete worked example.
Without a theme providing a ControlTheme for it, the control renders unstyled — the same contract as a stock Avalonia control before you install Fluent or Simple.
Why types-only?
Keeping the look out of this package means themes stay the sole owners of appearance, and absorbing these controls into the framework later is dropping a package reference rather than untangling duplicated styling.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Avalonia (>= 12.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.