Harmonogram Avalonia, Gantt i Kanban jako natywne kontrolki

sgcPlanner wnosi do Avalonia 12 harmonogram w formie kalendarza, wykres Gantta i tablicę Kanban jako natywne kontrolki: TsgcAvaloniaScheduler, TsgcAvaloniaGantt i TsgcAvaloniaKanban. Działają w systemach Windows, Linux i macOS, wiążą się w XAML z Twoimi view modelami i współdzielą jedną listę zadań, więc karta upuszczona na tablicy przesuwa pasek na wykresie Gantta i wydarzenie w kalendarzu. Bez środowiska WPF pomiędzy, a te same kontrolki istnieją dla WinForms, WPF i Delphi.

Pakiet do planowania wewnątrz Twojej aplikacji Avalonia

Trzy kontrolki nad jednym obiektem TsgcPlannerData. Umieść w oknach jedną, dwie lub wszystkie trzy.

Demo ProjectPlanner: te same zadania na tablicy Kanban, na wykresie Gantta i w harmonogramie
Demo ProjectPlanner: jeden projekt na tablicy Kanban, na wykresie Gantta i w harmonogramie. ProjectPlannerAvalonia pokazuje ten sam projekt w oknie Avalonia.

Widoki kalendarza

View przełącza TsgcAvaloniaScheduler między dniem, tygodniem roboczym, tygodniem, miesiącem, agendą, osią czasu zasobów i rokiem, czyli dwunastoma miniaturami miesięcy, gdzie dwukrotne kliknięcie dnia otwiera go w widoku dnia. Options.GroupByResource daje każdej osobie grupę kolumn w widokach dnia.

Przeciągnij, aby utworzyć i edytować

Przeciągnięcie po pustym fragmencie siatki czasu tworzy wydarzenie dopasowane do Options.SlotMinutes i wywołuje OnItemCreate z początkiem, końcem i zasobem. Wydarzenia przesuwa się i zmienia im rozmiar myszą, a z InplaceEdit klawisz F2 edytuje tytuł w miejscu.

Cykliczność

Element przechowuje regułę iCalendar, taką jak FREQ=WEEKLY;BYDAY=TU, w RecurrenceRule, a dane rozwijają serię w wystąpienia dla widocznego okresu. Przeciągnięcie wystąpienia wywołuje OnRecurrenceEdit, gdzie wybierasz prsOccurrence, prsSeries lub prsCancel. Domyślnie przeciągnięcie przesuwa tylko to wystąpienie.

Przypomnienia i strefy czasowe

TsgcPlannerReminders zgłasza elementy, których ReminderMinutes już minęły, z Dismiss i Snooze. Każdy element może mieć własną TimeZone, a Data.DisplayTimeZone pokazuje cały kalendarz w strefie wybranej przez użytkownika.

Wykres Gantta

TsgcAvaloniaGantt ma siatkę zadań z kolumnami, zadaniami podsumowującymi, kamieniami milowymi, postępem, zależnościami z automatycznym planowaniem, ścieżką krytyczną i liniami bazowymi. TimeScale.TierCount daje trzypoziomową skalę czasu, a ShowHistogram dodaje panel obciążenia zasobów, który maluje przeciążenie kolorem krytycznym.

Tablica Kanban

TsgcAvaloniaKanban pokazuje elementy jako karty w kolumnach według statusu. Upuszczenie wywołuje MoveItem na danych, co powiadamia każdy widok jeden raz, więc Gantt i harmonogram przerysowują się z nowym statusem. Swimlane i limity WIP są w edycji Registered.

Zasoby i przepustowość

Zasoby mają nazwę, kolor i inicjały. Nowość w sgcUI 2026.11: TsgcPlannerResource.Capacity skaluje obciążenie w histogramie, przesuwa linię przepustowości i oznacza przeciążenie powyżej niej, a wartość jest zapisywana w JSON oraz jako MaxUnits w plikach Microsoft Project.

Cofnij i ponów

Data.Undo cofa przeciągnięcie lub edycję w jednym kroku przez Undo i Redo. CanUndo, CanRedo, UndoCaption i RedoCaption sterują Twoimi przyciskami i ich podpowiedziami.

Import, eksport i drukowanie

Dane są ładowane i zapisywane w JSON oraz odczytywane z DataTable. Edycja Registered dodaje import i eksport iCalendar oraz MS Project XML (MSPDI). Drukowanie z podglądem i wyjście headless w PNG i SVG są w każdej edycji.

MVVM, motywy, języki i synchronizacja kalendarza

Planner stosuje konwencje aplikacji Avalonia, zamiast prosić Cię o przyjęcie własnych.

Binding MVVM w XAML

ItemsSource, ResourcesSource i DependenciesSource przyjmują Twoje własne kolekcje, TsgcAvaloniaPlannerItemFields przypisuje nazwy składowych Twojej klasy, a SelectedItem wiąże się w obu kierunkach. Przeciągnięcie w dowolnym widoku zapisuje nowe daty lub status z powrotem do Twoich obiektów. Jeden prefiks xmlns:sgc="https://www.esegece.com/sgcui" obejmuje wszystkie kontrolki sgcUI.

Motywy, w tym Fluent

Kontrolki podążają za wariantem motywu Avalonia Twojej aplikacji, jasnym lub ciemnym. Nowość w sgcUI 2026.11: w presecie Fluent przyjmują kolory FluentTheme z Avalonia, o ile podążają za hostem, wraz z promieniami narożników i pierścieniem fokusu z Windows 11.

Od prawej do lewej i dostępność

Kontrolki respektują FlowDirection od prawej do lewej, a Gantt może odbić swoją oś czasu lub zachować ją od lewej do prawej dzięki MirrorTimeline. Każda kontrolka ma automation peer Avalonia i nawigację klawiaturą, więc czytniki ekranu odczytują widoki, elementy i przedziały czasu. Dostępność jest domyślnie włączona w każdej edycji.

12 języków

Nowość w sgcUI 2026.11: teksty dla użytkownika końcowego pochodzą z wbudowanych pakietów językowych dla angielskiego, hiszpańskiego, niemieckiego, francuskiego, włoskiego, niderlandzkiego, polskiego, portugalskiego (Brazylia), tureckiego, japońskiego, koreańskiego i chińskiego. sgcUILang.SetLanguage przyjmuje ustawienia regionalne lub "auto" dla bieżącej kultury interfejsu.

Synchronizacja z Outlook, Google i CalDAV

Opcjonalny most esegece.sgcPlanner.sgcWebSockets z edycji Registered utrzymuje dane zsynchronizowane w obu kierunkach z kalendarzami Outlook w Microsoft 365 i Outlook.com przez Microsoft Graph (TsgcPlannerGraphSync), z Google Calendar (TsgcPlannerGoogleSync) oraz z dowolnym serwerem CalDAV, takim jak Nextcloud, iCloud, Fastmail lub Radicale (TsgcPlannerCalDAVSync). TsgcPlannerICalSubscription scala adres URL iCalendar tylko do odczytu. Most korzysta z sgcWebSockets.

Smart Paste

Ctrl+Shift+V w harmonogramie zamienia wklejony tekst w spotkanie. Wiersze takie jak "Nazwa: wartość" odczytuje wbudowany parser, a AIProvider przyjmuje TsgcUIAIEventProvider, który wywołuje wybrany przez Ciebie model LLM dla dowolnego tekstu, na przykład wiadomości e-mail. Smart Paste jest także w edycji Community.

Harmonogram i Gantt powiązane z jednym view modelem

Skopiowano z małej aplikacji Avalonia 12 na net8.0 z FluentTheme i skompilowanymi bindingami, z pominięciem wierszy using i przestrzeni nazw. Aplikacja kompiluje się z 0 ostrzeżeń i 0 błędów względem buildu Registered i Community sgcPlanner.

View model: zwykłe klasy

Twoje własne typy, nic do dziedziczenia. Codzienny stand-up to jeden element z regułą cykliczności.

TTeamViewModel.cs
public class TMeeting
{
    public string Key { get; set; }
    public string Subject { get; set; }
    public DateTime Begin { get; set; }
    public DateTime End { get; set; }
    public string Owner { get; set; }
    public string Rule { get; set; }
}

public class TPerson
{
    public string Code { get; set; }
    public string Label { get; set; }
}

public class TTeamViewModel
{
    public ObservableCollection<TMeeting> Meetings { get; } = new ObservableCollection<TMeeting>();
    public ObservableCollection<TPerson> People { get; } = new ObservableCollection<TPerson>();

    public TTeamViewModel()
    {
        People.Add(new TPerson { Code = "ann", Label = "Ann" });
        People.Add(new TPerson { Code = "bob", Label = "Bob" });
        DateTime vMonday = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek + 6) % 7));
        Meetings.Add(new TMeeting { Key = "m1", Subject = "Stand-up", Owner = "ann",
            Begin = vMonday.AddHours(9), End = vMonday.AddHours(9.25),
            Rule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR" });
        Meetings.Add(new TMeeting { Key = "m2", Subject = "Design review", Owner = "bob",
            Begin = vMonday.AddDays(2).AddHours(14), End = vMonday.AddDays(2).AddHours(15) });
    }
}

Okno: dwa widoki na tych samych kolekcjach

Mapy pól mówią kontrolkom, która składowa przechowuje identyfikator, tytuł, daty, właściciela i regułę.

MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sgc="https://www.esegece.com/sgcui"
        xmlns:local="using:TeamCalendar"
        x:Class="TeamCalendar.MainWindow"
        x:DataType="local:TTeamViewModel"
        Title="Team calendar" Width="1100" Height="720">
  <TabControl>
    <TabItem Header="Calendar">
      <sgc:TsgcAvaloniaScheduler x:Name="scheduler" View="psvWorkWeek" InplaceEdit="True"
                                 ItemsSource="{Binding Meetings}" ResourcesSource="{Binding People}">
        <sgc:TsgcAvaloniaScheduler.ItemFields>
          <sgc:TsgcAvaloniaPlannerItemFields IdField="Key" TitleField="Subject" StartField="Begin"
                                             FinishField="End" ResourcesField="Owner"
                                             RecurrenceField="Rule"/>
        </sgc:TsgcAvaloniaScheduler.ItemFields>
        <sgc:TsgcAvaloniaScheduler.ResourceFields>
          <sgc:TsgcAvaloniaPlannerResourceFields IdField="Code" NameField="Label"/>
        </sgc:TsgcAvaloniaScheduler.ResourceFields>
      </sgc:TsgcAvaloniaScheduler>
    </TabItem>
    <TabItem Header="Gantt">
      <sgc:TsgcAvaloniaGantt x:Name="gantt" ShowHistogram="True" ShowToday="True"
                             ItemsSource="{Binding Meetings}" ResourcesSource="{Binding People}">
        <sgc:TsgcAvaloniaGantt.ItemFields>
          <sgc:TsgcAvaloniaPlannerItemFields IdField="Key" TitleField="Subject" StartField="Begin"
                                             FinishField="End" ResourcesField="Owner"/>
        </sgc:TsgcAvaloniaGantt.ItemFields>
        <sgc:TsgcAvaloniaGantt.ResourceFields>
          <sgc:TsgcAvaloniaPlannerResourceFields IdField="Code" NameField="Label"/>
        </sgc:TsgcAvaloniaGantt.ResourceFields>
      </sgc:TsgcAvaloniaGantt>
    </TabItem>
  </TabControl>
</Window>

Code behind: opcje i zdarzenie tworzenia

Pogrupuj tydzień roboczy według osób, dopasuj nowe wydarzenia do 15 minut, nadaj nazwę wydarzeniu tworzonemu przez przeciągnięcie i daj Ganttowi trzypoziomową skalę czasu.

MainWindow.axaml.cs
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        scheduler.Options.GroupByResource = true;
        scheduler.Options.SlotMinutes = 15;
        // a drag on an empty slot creates a meeting: name it here
        scheduler.OnItemCreate = DoItemCreate;
        // three tier timescale over the Gantt bars
        gantt.TimeScale.TierCount = 3;
    }

    private void DoItemCreate(object aSender, DateTime aStart, DateTime aFinish,
        string aResourceId, ref string aTitle, ref bool aAccept)
    {
        aTitle = "New meeting";
    }
}

Projekt odwołuje się do Avalonia.Desktop i Avalonia.Themes.Fluent 12.1.4 oraz do esegece.sgcPlanner.Avalonia, albo do esegece.sgcPlanner.Avalonia.Community dla darmowej edycji, w której stand-up pojawia się tylko raz, ponieważ cykliczność jest funkcją edycji Registered. Aplikacja dodaje new FluentTheme() do swoich stylów i ustawia DataContext = new TTeamViewModel() w oknie.

Gdzie działa

Jeden model plannera, te same widoki w każdym hoście.

Host Kontrolki Platformy docelowe
Avalonia 12TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanbannet8.0, net9.0, net10.0 w systemach Windows, Linux i macOS
WinForms i WPFTsgcWinFormsScheduler, Gantt i Kanban oraz odpowiedniki WPF.NET, w tej samej licencji co Avalonia
Delphi i C++BuilderTsgcVCLScheduler, TsgcFMXScheduler i ich odpowiedniki Gantta i KanbanaVCL i FireMonkey, w edycji Delphi sgcPlanner
HeadlessTsgcPlannerRendererWyjście PNG i SVG bez okna, w systemach Windows, Linux i macOS

Kontrolki Avalonia są rysowane przez SkiaSharp na bazie kontrolek Avalonia z sgcUICore. Dema TeamSchedulerAvalonia i ProjectPlannerAvalonia wymagają .NET SDK 8.0 lub nowszego i działają w systemach Windows, Linux lub macOS.

Trzy sposoby na harmonogram w Avalonia

Stan z 2026-10-20, źródła znajdziesz w przewodnikach Avalonia Pro oraz Z WinForms i WPF do Avalonia.

  Pakiet WPF na Avalonia XPF Avalonia Pro sgcPlanner dla Avalonia
Czym jestharmonogram WPF działający na XPF, który jego dostawca nazywa "binarnie zgodnym środowiskiem WPF"komponenty premium Avalonianatywne kontrolki Avalonia 12
Harmonogram, Gantt, Kanbante z pakietu WPF, z warunkami z notatek XPF o bibliotekach firm trzecich, na przykład shimy API Win32 dla kontrolek DevExpressniewymienione na stronie Avalonia ProTsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanban
LicencjaXPF na aplikację, od 9 500 EUR (Internal) i 29 500 EUR (Business), plus licencja pakietu WPF899 EUR za stanowisko roczniena programistę: sgcPlanner .NET €249 lub sgcUI .NET Enterprise €699, bez opłaty za aplikację
Kod źródłowy pełny kod źródłowy kontrolek premium w Enterprisepełny kod źródłowy C# w każdej licencji Registered
Poziom darmowy Community, od 2026-04-07 dla nowych rejestracji tylko do użytku niekomercyjnegoPakiety NuGet Community, także do użytku komercyjnego przy przychodzie poniżej 1 000 000 EUR i do pięciu programistów

Dla uczciwości wobec pozostałych dróg: XPF ma uruchamiać istniejącą aplikację WPF w systemach macOS i Linux w dużej mierze bez zmian, a sgcPlanner tego nie robi. Avalonia Pro daje komponenty premium i narzędzia producenta, takie jak Hot Reload i DevTools, których sgcUI nie dostarcza. sgcPlanner działa obok kontrolek Avalonia Pro w tym samym oknie.

Community lub Registered

Obie edycje mają te same trzy kontrolki. Edycja Registered dodaje zaawansowane funkcje planowania i kod źródłowy.

Community, darmowa

esegece.sgcPlanner.Avalonia.Community w NuGet, darmowy w projektach komercyjnych i niekomercyjnych dla osób prywatnych i organizacji o rocznym przychodzie brutto poniżej 1 000 000 EUR i z nie więcej niż pięcioma programistami. Widoki dnia, tygodnia roboczego, tygodnia, miesiąca i agendy, Gantt i Kanban z przeciąganiem, zadania podsumowujące, kamienie milowe, postęp, grupowanie według zasobów, dane DataTable i JSON, Smart Paste, drukowanie i wyjście headless w PNG i SVG.

Registered

esegece.sgcPlanner.Avalonia, w pojedynczym pakiecie sgcPlanner .NET €249 i w sgcUI .NET Enterprise €699 na programistę. Dodaje cykliczność, oś czasu zasobów, zależności z automatycznym planowaniem, ścieżkę krytyczną, linie bazowe, swimlane i limity WIP w Kanbanie, iCalendar i MS Project XML, most synchronizacji kalendarza, pełny kod źródłowy C# i bezpłatną redystrybucję binarną.

Dwa dema Avalonia z autotestem

Oba uruchamiają się przez dotnet run, a dotnet run -- --test result.txt zapisuje jeden wiersz PASS lub FAIL na każdą kontrolę i kończy działanie z liczbą nieudanych kontroli.

TeamSchedulerAvalonia

Trzy tygodnie spotkań zespołu dla pięciu osób: każdy widok, edycja tytułu w miejscu, cofnij i ponów, przypomnienia z Dismiss i Snooze, strefy czasowe dla poszczególnych elementów, cykliczne stand-upy i synchronizacje, przeciąganie do tworzenia, grupowanie według zasobów i Smart Paste.

ProjectPlannerAvalonia

Projekt odświeżenia strony internetowej pokazany jednocześnie na wykresie Gantta, tablicy Kanban i w tygodniu, wszystko powiązane z tymi samymi danymi: przeciągnij kartę z To do do Done, a pasek Gantta i wydarzenie w kalendarzu zmienią kolor na zielony. Z trzypoziomową skalą czasu, histogramem zasobów i cofaniem.

Zobacz dema sgcUI lub przeczytaj o każdej funkcji na stronie produktu sgcPlanner.

Pytania o harmonogram Avalonia

Czy harmonogram jest natywną kontrolką Avalonia, czy kontrolką WPF na warstwie zgodności?

To natywna kontrolka Avalonia. TsgcAvaloniaScheduler, TsgcAvaloniaGantt i TsgcAvaloniaKanban są zbudowane na Avalonia i Avalonia.Skia 12 i rysowane przez SkiaSharp, w pakiecie esegece.sgcPlanner.Avalonia dla net8.0, net9.0 i net10.0. Pomiędzy nimi nie ma środowiska WPF, a kontrolki działają w systemach Windows, Linux i macOS.

Czy mogę powiązać harmonogram z własnym view modelem w XAML?

Tak. ItemsSource, ResourcesSource i DependenciesSource przyjmują dowolny IEnumerable, na przykład ObservableCollection Twojej własnej klasy, a TsgcAvaloniaPlannerItemFields przypisuje nazwy Twoich składowych do identyfikatora, tytułu, początku, końca, zasobów, statusu, cykliczności i pozostałych pól elementu. SelectedItem wiąże się w obu kierunkach, a przeciągnięcie lub edycja w kontrolce zapisuje nowe wartości z powrotem do Twoich obiektów. Skompilowane bindingi z x:DataType działają.

Czy istnieje darmowa edycja harmonogramu Avalonia?

Tak. esegece.sgcPlanner.Avalonia.Community jest darmowy dla osób prywatnych i organizacji o rocznym przychodzie brutto poniżej 1 000 000 EUR i z nie więcej niż pięcioma programistami. Zawiera widoki dnia, tygodnia roboczego, tygodnia, miesiąca i agendy, Gantta oraz tablicę Kanban. Cykliczność, oś czasu zasobów, zależności z automatycznym planowaniem, ścieżka krytyczna, linie bazowe, swimlane i limity WIP w Kanbanie oraz wymiana iCalendar i MS Project XML wymagają edycji Registered.

Czy harmonogram Avalonia może synchronizować się z Outlook, Google Calendar lub CalDAV?

Tak, przez opcjonalny pakiet mostu esegece.sgcPlanner.sgcWebSockets z edycji Registered, który korzysta z sgcWebSockets. TsgcPlannerGraphSync utrzymuje dane zsynchronizowane w obu kierunkach z kalendarzem Outlook w Microsoft 365 lub Outlook.com przez Microsoft Graph, TsgcPlannerGoogleSync z kalendarzem Google, a TsgcPlannerCalDAVSync z kalendarzem CalDAV, takim jak Nextcloud, iCloud, Fastmail lub Radicale. TsgcPlannerICalSubscription scala adres URL iCalendar tylko do odczytu. Most działa na obiekcie danych, więc obsługuje zarówno kontrolki Avalonia, jak i te dla WinForms oraz WPF.

Która edycja sgcUI zawiera sgcPlanner dla Avalonia?

sgcPlanner .NET jest zawarty w edycji sgcUI .NET Enterprise i jest też sprzedawany jako pojedynczy pakiet. Obie licencje obejmują WinForms, WPF i Avalonia, z pełnym kodem źródłowym C# i bezpłatną redystrybucją binarną.

Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Dodaj harmonogram do swojej aplikacji Avalonia

Zacznij od darmowego pakietu Community z NuGet albo od pakietu Registered z cyklicznością, osią czasu, synchronizacją kalendarza i pełnym kodem źródłowym, i otwórz demo TeamSchedulerAvalonia obok swojej aplikacji.