Avalonia 计划器、甘特图和看板,全部是原生控件

sgcPlanner 以原生控件的形式为 Avalonia 12 带来日历计划器、甘特图和看板:TsgcAvaloniaScheduler、TsgcAvaloniaGantt 和 TsgcAvaloniaKanban。它们可在 Windows、Linux 和 macOS 上运行,在 XAML 中绑定到您的视图模型,并共享同一个任务列表,因此放到看板上的卡片会同时移动甘特图中的条形和日历中的事件。中间没有 WPF 运行时,同样的控件也提供给 WinForms、WPF 和 Delphi。

Avalonia 应用内的计划套件

三个控件共用一个 TsgcPlannerData 对象。可在窗口中放置一个、两个或全部三个。

ProjectPlanner 演示:同一批任务显示在看板、甘特图和计划器中
ProjectPlanner 演示:同一个项目显示在看板、甘特图和计划器中。ProjectPlannerAvalonia 在 Avalonia 窗口中显示同一个项目。

日历视图

View 可在日、工作周、周、月、议程、资源时间线和年之间切换 TsgcAvaloniaScheduler。年视图是十二个迷你月历,双击某一天会在日视图中打开它。Options.GroupByResource 在日视图中为每个人提供一组列。

拖动创建和编辑

在时间网格的空白处拖动会创建一个按 Options.SlotMinutes 对齐的事件,并触发带有开始、结束和资源的 OnItemCreate。事件可用鼠标移动和调整大小,启用 InplaceEdit 后按 F2 可就地编辑标题。

重复

条目在 RecurrenceRule 中保存 iCalendar 规则,例如 FREQ=WEEKLY;BYDAY=TU,数据会把系列展开为可见时段内的各次出现。拖动某次出现会触发 OnRecurrenceEdit,您可在其中选择 prsOccurrence、prsSeries 或 prsCancel。默认情况下,拖动只移动该次出现。

提醒和时区

TsgcPlannerReminders 会报告 ReminderMinutes 已到期的条目,并提供 Dismiss 和 Snooze。每个条目都可以带有自己的 TimeZone,Data.DisplayTimeZone 则以用户选择的时区显示整个日历。

甘特图

TsgcAvaloniaGantt 带有任务网格,包含列、摘要、里程碑、进度、带自动排程的依赖关系、关键路径和基线。TimeScale.TierCount 提供三层时间刻度,ShowHistogram 则添加资源负载窗格,以关键色标出过度分配。

看板

TsgcAvaloniaKanban 以按状态分列的卡片显示条目。放下卡片会调用数据上的 MoveItem,它会通知每个视图一次,因此甘特图和计划器会以新状态重绘。泳道和 WIP 限制属于注册版。

资源和容量

资源有名称、颜色和缩写。sgcUI 2026.11 的新功能:TsgcPlannerResource.Capacity 会缩放直方图中的负载,移动容量线并标出其上方的过度分配,它保存在 JSON 中,在 Microsoft Project 文件中则保存为 MaxUnits。

撤销和重做

Data.Undo 通过 Undo 和 Redo 一步撤销一次拖动或编辑。CanUndo、CanRedo、UndoCaption 和 RedoCaption 用于驱动您的按钮及其工具提示。

导入、导出和打印

数据可加载和保存 JSON,并可读取 DataTable。注册版增加了 iCalendar 和 MS Project XML (MSPDI) 的导入和导出。带预览的打印以及无窗口的 PNG 和 SVG 输出在每个版本中都有。

MVVM、主题、语言和日历同步

计划器遵循 Avalonia 应用的惯例,而不是要求您接受它自己的一套。

XAML 中的 MVVM 绑定

ItemsSource、ResourcesSource 和 DependenciesSource 接受您自己的集合,TsgcAvaloniaPlannerItemFields 映射您的类的成员名称,SelectedItem 支持双向绑定。在任何视图中拖动都会把新的日期或状态写回您的对象。一个 xmlns:sgc="https://www.esegece.com/sgcui" 前缀即可涵盖所有 sgcUI 控件。

包含 Fluent 的主题

控件遵循应用的 Avalonia 主题变体,浅色或深色。sgcUI 2026.11 的新功能:在 Fluent 预设下,它们在跟随宿主的同时采用 Avalonia FluentTheme 的颜色,并带有 Windows 11 的圆角半径和焦点环。

从右到左和辅助功能

控件支持从右到左的 FlowDirection,甘特图可以通过 MirrorTimeline 镜像其时间线,也可以保持从左到右。每个控件都有 Avalonia 自动化对等体和键盘导航,因此屏幕阅读器会播报视图、条目和时间槽。辅助功能在每个版本中默认开启。

12 种语言

sgcUI 2026.11 的新功能:最终用户文本来自内嵌的语言包,涵盖英语、西班牙语、德语、法语、意大利语、荷兰语、波兰语、葡萄牙语(巴西)、土耳其语、日语、韩语和中文。sgcUILang.SetLanguage 接受区域设置,或表示当前界面区域性的 "auto"。

Outlook、Google 和 CalDAV 同步

注册版的可选 esegece.sgcPlanner.sgcWebSockets 桥接包可使数据与以下对象双向同步:通过 Microsoft Graph 连接 Microsoft 365 和 Outlook.com 的 Outlook 日历(TsgcPlannerGraphSync)、Google 日历(TsgcPlannerGoogleSync),以及 Nextcloud、iCloud、Fastmail 或 Radicale 等任何 CalDAV 服务器(TsgcPlannerCalDAVSync)。TsgcPlannerICalSubscription 会合并只读的 iCalendar URL。该桥接包使用 sgcWebSockets。

Smart Paste

在计划器上按 Ctrl+Shift+V 会把粘贴的文本变成会议。形如“名称: 值”的行由内置解析器读取,AIProvider 接受 TsgcUIAIEventProvider,它可针对电子邮件等自由文本调用您选择的 LLM。社区版同样包含 Smart Paste。

绑定到同一个视图模型的计划器和甘特图

复制自 net8.0 上一个使用 FluentTheme 和编译绑定的小型 Avalonia 12 应用,省略了 using 行和命名空间。该应用针对 sgcPlanner 的注册版和社区版构建均可编译,0 个警告,0 个错误。

视图模型:普通类

使用您自己的类型,无需继承任何东西。每日站会是一个带有重复规则的条目。

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

窗口:同一组集合上的两个视图

字段映射告诉控件哪个成员保存标识、标题、日期、负责人和规则。

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>

代码隐藏:选项和创建事件

按人员对工作周分组,把新事件对齐到 15 分钟,为拖动创建的事件命名,并为甘特图设置三层时间刻度。

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

项目引用 Avalonia.Desktop 和 Avalonia.Themes.Fluent 12.1.4,以及 esegece.sgcPlanner.Avalonia,免费版则引用 esegece.sgcPlanner.Avalonia.Community,由于重复是注册版功能,站会只会显示一次。应用把 new FluentTheme() 添加到样式中,并在窗口上设置 DataContext = new TTeamViewModel()。

运行环境

同一个计划器模型,在每个宿主中都是相同的视图。

宿主 控件 目标
Avalonia 12TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanbanWindows、Linux 和 macOS 上的 net8.0、net9.0、net10.0
WinForms 和 WPFTsgcWinFormsScheduler、甘特图和看板,以及对应的 WPF 控件.NET,与 Avalonia 使用同一份许可
Delphi 和 C++BuilderTsgcVCLScheduler、TsgcFMXScheduler 及其对应的甘特图和看板控件sgcPlanner Delphi 版中的 VCL 和 FireMonkey
无头模式TsgcPlannerRenderer无需窗口的 PNG 和 SVG 输出,适用于 Windows、Linux 和 macOS

Avalonia 控件基于 sgcUICore 的 Avalonia 控件基类,用 SkiaSharp 绘制。演示 TeamSchedulerAvalonia 和 ProjectPlannerAvalonia 需要 .NET SDK 8.0 或更高版本,可在 Windows、Linux 或 macOS 上运行。

在 Avalonia 上获得计划器的三种方式

以 2026-10-20 读取的信息为准,来源请参阅 Avalonia Pro 以及 从 WinForms 和 WPF 迁移到 Avalonia 指南。

  Avalonia XPF 上的 WPF 套件 Avalonia Pro sgcPlanner for Avalonia
是什么运行在 XPF 上的 WPF 计划器,其厂商称 XPF 为 "a binary-compatible WPF runtime"高级 Avalonia 组件原生 Avalonia 12 控件
计划器、甘特图、看板来自 WPF 套件,并附带 XPF 第三方库说明中的条件,例如针对 DevExpress 控件的 Win32 API 垫片Avalonia Pro 页面中未列出TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanban
许可XPF 按应用授权,起价 EUR 9,500(Internal)和 EUR 29,500(Business),另需 WPF 套件的许可每席位每年 EUR 899按开发者:sgcPlanner .NET €249,或 sgcUI .NET Enterprise €699,无按应用收费
源代码 高级控件的完整源代码包含在 Enterprise 中每个注册版许可都包含完整的 C# 源代码
免费层 Community,自 2026-04-07 起新注册用户仅限非商业用途Community NuGet 包,收入低于 EUR 1,000,000 且开发者不超过五人时也可用于商业用途

公平地说,对其他方案也要说明:XPF 的目标是让现有 WPF 应用基本原样在 macOS 和 Linux 上运行,sgcPlanner 做不到这一点。Avalonia Pro 提供高级组件以及 Hot Reload 和 DevTools 等厂商工具,sgcUI 不提供这些。sgcPlanner 可在同一窗口中与 Avalonia Pro 控件并排运行。

社区版或注册版

两个版本都有相同的三个控件。注册版增加了高级计划功能和源代码。

社区版,免费

NuGet 上的 esegece.sgcPlanner.Avalonia.Community,对年总收入低于 EUR 1,000,000 且开发者不超过五人的个人和组织,在商业和非商业项目中均免费。包含日、工作周、周、月和议程视图,支持拖动的甘特图和看板,摘要、里程碑、进度、按资源分组、DataTable 和 JSON 数据、Smart Paste、打印,以及无窗口的 PNG 和 SVG 输出。

注册版

esegece.sgcPlanner.Avalonia 包含在 sgcPlanner .NET 单个软件包 €249 中,也包含在按开发者计费的 sgcUI .NET Enterprise €699 中。增加重复、资源时间线、带自动排程的依赖关系、关键路径、基线、看板泳道和 WIP 限制、iCalendar 和 MS Project XML、日历同步桥接包、完整的 C# 源代码以及免费的二进制再分发。

两个带自检的 Avalonia 演示

两者都可用 dotnet run 运行,dotnet run -- --test result.txt 会为每项检查写入一行 PASS 或 FAIL,并以失败检查的数量作为退出码退出。

TeamSchedulerAvalonia

五个人三周的团队会议:所有视图、就地编辑标题、撤销和重做、带 Dismiss 和 Snooze 的提醒、按条目设置的时区、重复的站会和同步会、拖动创建、按资源分组以及 Smart Paste。

ProjectPlannerAvalonia

一个网站重新上线项目同时显示在甘特图、看板和周视图中,全部绑定到同一份数据:把卡片从 To do 拖到 Done,甘特图的条形和日历事件就会变绿。包含三层时间刻度、资源直方图和撤销。

查看 sgcUI 演示,或在 sgcPlanner 产品页面了解每项功能。

Avalonia 计划器常见问题

该计划器是原生 Avalonia 控件,还是兼容层上的 WPF 控件?

它是原生 Avalonia 控件。TsgcAvaloniaScheduler、TsgcAvaloniaGantt 和 TsgcAvaloniaKanban 构建在 Avalonia 和 Avalonia.Skia 12 之上,用 SkiaSharp 绘制,位于面向 net8.0、net9.0 和 net10.0 的 esegece.sgcPlanner.Avalonia 包中。中间没有 WPF 运行时,控件可在 Windows、Linux 和 macOS 上运行。

我可以在 XAML 中把计划器绑定到自己的视图模型吗?

可以。ItemsSource、ResourcesSource 和 DependenciesSource 接受任何 IEnumerable,例如您自己的类的 ObservableCollection,TsgcAvaloniaPlannerItemFields 会把您的成员名称映射到标识、标题、开始、结束、资源、状态、重复和其他条目字段。SelectedItem 支持双向绑定,在控件中拖动或编辑会把新值写回您的对象。使用 x:DataType 的编译绑定同样可用。

Avalonia 计划器有免费版吗?

有。esegece.sgcPlanner.Avalonia.Community 对年总收入低于 EUR 1,000,000 且开发者不超过五人的个人和组织免费。它包含日、工作周、周、月和议程视图、甘特图和看板。重复、资源时间线、带自动排程的依赖关系、关键路径、基线、看板泳道和 WIP 限制,以及 iCalendar 和 MS Project XML 交换,需要注册版。

Avalonia 计划器可以与 Outlook、Google 日历或 CalDAV 同步吗?

可以,通过注册版可选的 esegece.sgcPlanner.sgcWebSockets 桥接包实现,它使用 sgcWebSockets。TsgcPlannerGraphSync 通过 Microsoft Graph 使数据与 Microsoft 365 或 Outlook.com 的 Outlook 日历双向同步,TsgcPlannerGoogleSync 与 Google 日历同步,TsgcPlannerCalDAVSync 与 Nextcloud、iCloud、Fastmail 或 Radicale 等 CalDAV 日历同步。TsgcPlannerICalSubscription 会合并只读的 iCalendar URL。该桥接包作用于数据对象,因此既适用于 Avalonia 控件,也适用于 WinForms 和 WPF 控件。

哪个 sgcUI 版本包含适用于 Avalonia 的 sgcPlanner?

sgcPlanner .NET 包含在 sgcUI .NET Enterprise 版中,也作为单个软件包销售。两种许可都涵盖 WinForms、WPF 和 Avalonia,并附带完整的 C# 源代码和免费的二进制再分发。

超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

为您的 Avalonia 应用添加计划器

可从 NuGet 上免费的社区版软件包开始,或选择带有重复、时间线、日历同步和完整源代码的注册版软件包,并在您的应用旁边打开 TeamSchedulerAvalonia 演示。