Scheduler Avalonia, Gantt e Kanban come controlli nativi

sgcPlanner porta in Avalonia 12 uno scheduler a calendario, un diagramma di Gantt e una bacheca Kanban come controlli nativi: TsgcAvaloniaScheduler, TsgcAvaloniaGantt e TsgcAvaloniaKanban. Funzionano su Windows, Linux e macOS, si collegano ai tuoi view model in XAML e condividono un'unica lista di attività, così una scheda rilasciata sulla bacheca sposta la barra nel Gantt e l'evento nel calendario. Nessun runtime WPF di mezzo, e gli stessi controlli esistono per WinForms, WPF e Delphi.

Una suite di pianificazione dentro la tua app Avalonia

Tre controlli su un unico oggetto TsgcPlannerData. Inserisci uno, due o tutti e tre nelle tue finestre.

Demo ProjectPlanner: le stesse attività su una bacheca Kanban, in un diagramma di Gantt e in uno scheduler
La demo ProjectPlanner: un progetto su una bacheca Kanban, in un diagramma di Gantt e in uno scheduler. ProjectPlannerAvalonia mostra lo stesso progetto in una finestra Avalonia.

Viste calendario

View fa passare TsgcAvaloniaScheduler tra giorno, settimana lavorativa, settimana, mese, agenda, la timeline delle risorse e l'anno, dodici mini mesi in cui un doppio clic su un giorno lo apre nella vista giorno. Options.GroupByResource dà a ogni persona un gruppo di colonne nelle viste giorno.

Trascina per creare e modificare

Un trascinamento su una zona vuota della griglia oraria crea un evento allineato a Options.SlotMinutes e genera OnItemCreate con inizio, fine e risorsa. Gli eventi si spostano e si ridimensionano con il mouse, e con InplaceEdit F2 modifica il titolo sul posto.

Ricorrenza

Un elemento conserva una regola iCalendar come FREQ=WEEKLY;BYDAY=TU in RecurrenceRule, e i dati espandono la serie in occorrenze per il periodo visibile. Trascinare un'occorrenza genera OnRecurrenceEdit, dove scegli prsOccurrence, prsSeries o prsCancel. Per impostazione predefinita il trascinamento sposta solo quell'occorrenza.

Promemoria e fusi orari

TsgcPlannerReminders segnala gli elementi i cui ReminderMinutes sono scaduti, con Dismiss e Snooze. Ogni elemento può avere il proprio TimeZone, e Data.DisplayTimeZone mostra l'intero calendario nel fuso scelto dall'utente.

Diagramma di Gantt

TsgcAvaloniaGantt ha una griglia delle attività con colonne, riepiloghi, milestone, avanzamento, dipendenze con pianificazione automatica, percorso critico e baseline. TimeScale.TierCount dà una scala temporale a tre livelli, e ShowHistogram aggiunge un pannello del carico delle risorse che dipinge il sovraccarico con il colore critico.

Bacheca Kanban

TsgcAvaloniaKanban mostra gli elementi come schede in colonne per stato. Un rilascio chiama MoveItem sui dati, che notifica una sola volta ogni vista, così il Gantt e lo scheduler si ridisegnano con il nuovo stato. Swimlane e limiti WIP sono nell'edizione Registered.

Risorse e capacità

Le risorse hanno un nome, un colore e le iniziali. Novità di sgcUI 2026.11, TsgcPlannerResource.Capacity scala il carico nell'istogramma, sposta la linea della capacità e segna il sovraccarico sopra di essa, e viene salvato in JSON e come MaxUnits nei file Microsoft Project.

Annulla e ripristina

Data.Undo annulla un trascinamento o una modifica in un solo passo con Undo e Redo. CanUndo, CanRedo, UndoCaption e RedoCaption pilotano i tuoi pulsanti e i relativi tooltip.

Importazione, esportazione e stampa

I dati si caricano e si salvano in JSON e si leggono da un DataTable. L'edizione Registered aggiunge l'importazione e l'esportazione di iCalendar e MS Project XML (MSPDI). La stampa con anteprima e l'output headless in PNG e SVG sono in ogni edizione.

MVVM, temi, lingue e sincronizzazione del calendario

Il planner segue le convenzioni di un'applicazione Avalonia invece di chiederti di adottare le sue.

Binding MVVM in XAML

ItemsSource, ResourcesSource e DependenciesSource accettano le tue collezioni, TsgcAvaloniaPlannerItemFields associa i nomi dei membri della tua classe, e SelectedItem si collega in entrambe le direzioni. Un trascinamento in qualsiasi vista riscrive nei tuoi oggetti le nuove date o il nuovo stato. Un solo prefisso xmlns:sgc="https://www.esegece.com/sgcui" copre tutti i controlli sgcUI.

Temi, Fluent incluso

I controlli seguono la variante di tema Avalonia della tua app, chiara o scura. Novità di sgcUI 2026.11, con il preset Fluent prendono i colori del FluentTheme di Avalonia mentre seguono l'host, con i raggi degli angoli e l'anello di focus di Windows 11.

Da destra a sinistra e accessibilità

I controlli rispettano un FlowDirection da destra a sinistra, e il Gantt può specchiare la timeline o mantenerla da sinistra a destra con MirrorTimeline. Ogni controllo ha un automation peer di Avalonia e la navigazione da tastiera, così gli screen reader annunciano le viste, gli elementi e gli slot. L'accessibilità è attiva per impostazione predefinita in ogni edizione.

12 lingue

Novità di sgcUI 2026.11, i testi per l'utente finale provengono da pacchetti linguistici incorporati per inglese, spagnolo, tedesco, francese, italiano, olandese, polacco, portoghese (Brasile), turco, giapponese, coreano e cinese. sgcUILang.SetLanguage accetta una locale oppure "auto" per la cultura corrente dell'interfaccia.

Sincronizzazione con Outlook, Google e CalDAV

Il bridge opzionale esegece.sgcPlanner.sgcWebSockets dell'edizione Registered mantiene i dati sincronizzati in entrambe le direzioni con i calendari Outlook di Microsoft 365 e Outlook.com tramite Microsoft Graph (TsgcPlannerGraphSync), con Google Calendar (TsgcPlannerGoogleSync) e con qualsiasi server CalDAV come Nextcloud, iCloud, Fastmail o Radicale (TsgcPlannerCalDAVSync). TsgcPlannerICalSubscription unisce un URL iCalendar in sola lettura. Il bridge usa sgcWebSockets.

Smart Paste

Ctrl+Maiusc+V nello scheduler trasforma un testo incollato in una riunione. Le righe come "Nome: valore" sono lette dal parser integrato, e AIProvider accetta un TsgcUIAIEventProvider che chiama l'LLM che preferisci per il testo libero, come un'e-mail. Smart Paste è presente anche nell'edizione Community.

Uno scheduler e un Gantt collegati a un unico view model

Copiato da una piccola app Avalonia 12 su net8.0 con FluentTheme e binding compilati, senza le righe using e il namespace. L'app compila con 0 avvisi e 0 errori sia con la build Registered sia con quella Community di sgcPlanner.

Il view model: classi semplici

I tuoi tipi, niente da ereditare. Uno stand-up giornaliero è un solo elemento con una regola di ricorrenza.

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) });
    }
}

La finestra: due viste sulle stesse collezioni

Le mappe dei campi dicono ai controlli quale membro contiene l'id, il titolo, le date, il proprietario e la regola.

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>

Il code behind: opzioni ed evento di creazione

Raggruppa la settimana lavorativa per persona, allinea i nuovi eventi a 15 minuti, assegna un nome all'evento creato da un trascinamento e dai al Gantt una scala temporale a tre livelli.

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";
    }
}

Il progetto fa riferimento a Avalonia.Desktop e Avalonia.Themes.Fluent 12.1.4 e a esegece.sgcPlanner.Avalonia, oppure a esegece.sgcPlanner.Avalonia.Community per l'edizione gratuita, dove lo stand-up compare una sola volta perché la ricorrenza è una funzione Registered. L'applicazione aggiunge new FluentTheme() ai suoi stili e imposta DataContext = new TTeamViewModel() sulla finestra.

Dove funziona

Un solo modello di planner, le stesse viste in ogni host.

Host Controlli Target
Avalonia 12TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanbannet8.0, net9.0, net10.0 su Windows, Linux e macOS
WinForms e WPFTsgcWinFormsScheduler, Gantt e Kanban, e gli equivalenti WPF.NET, nella stessa licenza di Avalonia
Delphi e C++BuilderTsgcVCLScheduler, TsgcFMXScheduler e i loro equivalenti Gantt e KanbanVCL e FireMonkey, nell'edizione Delphi di sgcPlanner
HeadlessTsgcPlannerRendererOutput PNG e SVG senza finestra, su Windows, Linux e macOS

I controlli Avalonia sono disegnati con SkiaSharp sulla base di controlli Avalonia di sgcUICore. Le demo TeamSchedulerAvalonia e ProjectPlannerAvalonia richiedono il .NET SDK 8.0 o successivo e funzionano su Windows, Linux o macOS.

Tre modi per avere uno scheduler su Avalonia

Come letto il 2026-10-20, consulta le guide Avalonia Pro e Da WinForms e WPF ad Avalonia per le fonti.

  Una suite WPF su Avalonia XPF Avalonia Pro sgcPlanner per Avalonia
Cos'èuno scheduler WPF eseguito su XPF, che il suo fornitore definisce "un runtime WPF compatibile a livello binario"i componenti Avalonia premiumcontrolli Avalonia 12 nativi
Scheduler, Gantt, Kanbanquelli della suite WPF, con le condizioni delle note XPF sulle librerie di terze parti, ad esempio shim dell'API Win32 per i controlli DevExpressnon elencati nella pagina di Avalonia ProTsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanban
LicenzaXPF per applicazione, da 9.500 EUR (Internal) e 29.500 EUR (Business), più la licenza della suite WPF899 EUR per postazione all'annoper sviluppatore: sgcPlanner .NET €249, oppure sgcUI .NET Enterprise €699, senza costo per applicazione
Codice sorgente sorgente completo dei controlli premium in Enterprisecodice sorgente C# completo in ogni licenza Registered
Livello gratuito Community, solo uso non commerciale per le nuove registrazioni dal 2026-04-07Pacchetti NuGet Community, anche per uso commerciale sotto 1.000.000 EUR di ricavi e fino a cinque sviluppatori

Per correttezza verso le altre strade: XPF mira a eseguire un'applicazione WPF esistente su macOS e Linux in gran parte così com'è, e sgcPlanner non lo fa. Avalonia Pro offre componenti premium e strumenti del fornitore come Hot Reload e DevTools, che sgcUI non include. sgcPlanner funziona accanto ai controlli di Avalonia Pro nella stessa finestra.

Community o Registered

Entrambe le edizioni hanno gli stessi tre controlli. L'edizione Registered aggiunge le funzioni di pianificazione avanzate e il codice sorgente.

Community, gratuita

esegece.sgcPlanner.Avalonia.Community su NuGet, gratuito in progetti commerciali e non commerciali per privati e organizzazioni con meno di 1.000.000 EUR di ricavi lordi annui e al massimo cinque sviluppatori. Viste giorno, settimana lavorativa, settimana, mese e agenda, Gantt e Kanban con trascinamento, riepiloghi, milestone, avanzamento, raggruppamento per risorsa, dati DataTable e JSON, Smart Paste, stampa e output headless in PNG e SVG.

Registered

esegece.sgcPlanner.Avalonia, nel pacchetto singolo sgcPlanner .NET €249 e in sgcUI .NET Enterprise €699 per sviluppatore. Aggiunge ricorrenza, timeline delle risorse, dipendenze con pianificazione automatica, percorso critico, baseline, swimlane e limiti WIP di Kanban, iCalendar e MS Project XML, il bridge di sincronizzazione del calendario, il codice sorgente C# completo e la ridistribuzione binaria gratuita.

Due demo Avalonia con autoverifica

Entrambe si avviano con dotnet run, e dotnet run -- --test result.txt scrive una riga PASS o FAIL per ogni controllo e termina con il numero di controlli falliti.

TeamSchedulerAvalonia

Tre settimane di riunioni di team per cinque persone: ogni vista, modifica del titolo sul posto, annulla e ripristina, promemoria con Dismiss e Snooze, fusi orari per elemento, stand-up e sync ricorrenti, trascina per creare, raggruppamento per risorsa e Smart Paste.

ProjectPlannerAvalonia

Un progetto di rilancio di un sito web mostrato contemporaneamente in un diagramma di Gantt, in una bacheca Kanban e in una settimana, tutto collegato agli stessi dati: trascina una scheda da To do a Done e la barra del Gantt e l'evento del calendario diventano verdi. Con la scala temporale a tre livelli, l'istogramma delle risorse e l'annullamento.

Vedi le demo di sgcUI oppure leggi di ogni funzione nella pagina prodotto di sgcPlanner.

Domande sullo scheduler Avalonia

Lo scheduler è un controllo Avalonia nativo o un controllo WPF su un livello di compatibilità?

È un controllo Avalonia nativo. TsgcAvaloniaScheduler, TsgcAvaloniaGantt e TsgcAvaloniaKanban sono costruiti su Avalonia e Avalonia.Skia 12 e disegnati con SkiaSharp, nel pacchetto esegece.sgcPlanner.Avalonia per net8.0, net9.0 e net10.0. Non c'è alcun runtime WPF di mezzo, e i controlli funzionano su Windows, Linux e macOS.

Posso collegare lo scheduler al mio view model in XAML?

Sì. ItemsSource, ResourcesSource e DependenciesSource accettano qualsiasi IEnumerable, ad esempio una ObservableCollection di una tua classe, e TsgcAvaloniaPlannerItemFields associa i nomi dei tuoi membri a id, titolo, inizio, fine, risorse, stato, ricorrenza e agli altri campi dell'elemento. SelectedItem si collega in entrambe le direzioni, e un trascinamento o una modifica nel controllo riscrive i nuovi valori nei tuoi oggetti. I binding compilati con x:DataType funzionano.

Esiste un'edizione gratuita dello scheduler Avalonia?

Sì. esegece.sgcPlanner.Avalonia.Community è gratuito per privati e organizzazioni con meno di 1.000.000 EUR di ricavi lordi annui e al massimo cinque sviluppatori. Include le viste giorno, settimana lavorativa, settimana, mese e agenda, il Gantt e la bacheca Kanban. Ricorrenza, timeline delle risorse, dipendenze con pianificazione automatica, percorso critico, baseline, swimlane e limiti WIP di Kanban e scambio di iCalendar e MS Project XML richiedono l'edizione Registered.

Lo scheduler Avalonia può sincronizzarsi con Outlook, Google Calendar o CalDAV?

Sì, tramite il pacchetto bridge opzionale esegece.sgcPlanner.sgcWebSockets dell'edizione Registered, che usa sgcWebSockets. TsgcPlannerGraphSync mantiene i dati sincronizzati in entrambe le direzioni con un calendario Outlook di Microsoft 365 o Outlook.com tramite Microsoft Graph, TsgcPlannerGoogleSync con un calendario Google e TsgcPlannerCalDAVSync con un calendario CalDAV come Nextcloud, iCloud, Fastmail o Radicale. TsgcPlannerICalSubscription unisce un URL iCalendar in sola lettura. Il bridge lavora sull'oggetto dati, quindi serve sia i controlli Avalonia sia quelli WinForms e WPF.

Quale edizione di sgcUI include sgcPlanner per Avalonia?

sgcPlanner .NET è incluso nell'edizione sgcUI .NET Enterprise ed è venduto anche come pacchetto singolo. Entrambe le licenze coprono WinForms, WPF e Avalonia, con il codice sorgente C# completo e la ridistribuzione binaria gratuita.

La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Aggiungi uno scheduler alla tua app Avalonia

Inizia con il pacchetto Community gratuito da NuGet, oppure con il pacchetto Registered per ricorrenza, timeline, sincronizzazione del calendario e codice sorgente completo, e apri la demo TeamSchedulerAvalonia accanto alla tua app.