三个控件共用一个 TsgcPlannerData 对象。可在窗口中放置一个、两个或全部三个。
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 输出在每个版本中都有。
计划器遵循 Avalonia 应用的惯例,而不是要求您接受它自己的一套。
ItemsSource、ResourcesSource 和 DependenciesSource 接受您自己的集合,TsgcAvaloniaPlannerItemFields 映射您的类的成员名称,SelectedItem 支持双向绑定。在任何视图中拖动都会把新的日期或状态写回您的对象。一个 xmlns:sgc="https://www.esegece.com/sgcui" 前缀即可涵盖所有 sgcUI 控件。
控件遵循应用的 Avalonia 主题变体,浅色或深色。sgcUI 2026.11 的新功能:在 Fluent 预设下,它们在跟随宿主的同时采用 Avalonia FluentTheme 的颜色,并带有 Windows 11 的圆角半径和焦点环。
控件支持从右到左的 FlowDirection,甘特图可以通过 MirrorTimeline 镜像其时间线,也可以保持从左到右。每个控件都有 Avalonia 自动化对等体和键盘导航,因此屏幕阅读器会播报视图、条目和时间槽。辅助功能在每个版本中默认开启。
sgcUI 2026.11 的新功能:最终用户文本来自内嵌的语言包,涵盖英语、西班牙语、德语、法语、意大利语、荷兰语、波兰语、葡萄牙语(巴西)、土耳其语、日语、韩语和中文。sgcUILang.SetLanguage 接受区域设置,或表示当前界面区域性的 "auto"。
注册版的可选 esegece.sgcPlanner.sgcWebSockets 桥接包可使数据与以下对象双向同步:通过 Microsoft Graph 连接 Microsoft 365 和 Outlook.com 的 Outlook 日历(TsgcPlannerGraphSync)、Google 日历(TsgcPlannerGoogleSync),以及 Nextcloud、iCloud、Fastmail 或 Radicale 等任何 CalDAV 服务器(TsgcPlannerCalDAVSync)。TsgcPlannerICalSubscription 会合并只读的 iCalendar URL。该桥接包使用 sgcWebSockets。
在计划器上按 Ctrl+Shift+V 会把粘贴的文本变成会议。形如“名称: 值”的行由内置解析器读取,AIProvider 接受 TsgcUIAIEventProvider,它可针对电子邮件等自由文本调用您选择的 LLM。社区版同样包含 Smart Paste。
复制自 net8.0 上一个使用 FluentTheme 和编译绑定的小型 Avalonia 12 应用,省略了 using 行和命名空间。该应用针对 sgcPlanner 的注册版和社区版构建均可编译,0 个警告,0 个错误。
使用您自己的类型,无需继承任何东西。每日站会是一个带有重复规则的条目。
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) });
}
}字段映射告诉控件哪个成员保存标识、标题、日期、负责人和规则。
<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 分钟,为拖动创建的事件命名,并为甘特图设置三层时间刻度。
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 12 | TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanban | Windows、Linux 和 macOS 上的 net8.0、net9.0、net10.0 |
| WinForms 和 WPF | TsgcWinFormsScheduler、甘特图和看板,以及对应的 WPF 控件 | .NET,与 Avalonia 使用同一份许可 |
| Delphi 和 C++Builder | TsgcVCLScheduler、TsgcFMXScheduler 及其对应的甘特图和看板控件 | sgcPlanner Delphi 版中的 VCL 和 FireMonkey |
| 无头模式 | TsgcPlannerRenderer | 无需窗口的 PNG 和 SVG 输出,适用于 Windows、Linux 和 macOS |
Avalonia 控件基于 sgcUICore 的 Avalonia 控件基类,用 SkiaSharp 绘制。演示 TeamSchedulerAvalonia 和 ProjectPlannerAvalonia 需要 .NET SDK 8.0 或更高版本,可在 Windows、Linux 或 macOS 上运行。
以 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# 源代码以及免费的二进制再分发。
两者都可用 dotnet run 运行,dotnet run -- --test result.txt 会为每项检查写入一行 PASS 或 FAIL,并以失败检查的数量作为退出码退出。
五个人三周的团队会议:所有视图、就地编辑标题、撤销和重做、带 Dismiss 和 Snooze 的提醒、按条目设置的时区、重复的站会和同步会、拖动创建、按资源分组以及 Smart Paste。
一个网站重新上线项目同时显示在甘特图、看板和周视图中,全部绑定到同一份数据:把卡片从 To do 拖到 Done,甘特图的条形和日历事件就会变绿。包含三层时间刻度、资源直方图和撤销。
查看 sgcUI 演示,或在 sgcPlanner 产品页面了解每项功能。
它是原生 Avalonia 控件。TsgcAvaloniaScheduler、TsgcAvaloniaGantt 和 TsgcAvaloniaKanban 构建在 Avalonia 和 Avalonia.Skia 12 之上,用 SkiaSharp 绘制,位于面向 net8.0、net9.0 和 net10.0 的 esegece.sgcPlanner.Avalonia 包中。中间没有 WPF 运行时,控件可在 Windows、Linux 和 macOS 上运行。
可以。ItemsSource、ResourcesSource 和 DependenciesSource 接受任何 IEnumerable,例如您自己的类的 ObservableCollection,TsgcAvaloniaPlannerItemFields 会把您的成员名称映射到标识、标题、开始、结束、资源、状态、重复和其他条目字段。SelectedItem 支持双向绑定,在控件中拖动或编辑会把新值写回您的对象。使用 x:DataType 的编译绑定同样可用。
有。esegece.sgcPlanner.Avalonia.Community 对年总收入低于 EUR 1,000,000 且开发者不超过五人的个人和组织免费。它包含日、工作周、周、月和议程视图、甘特图和看板。重复、资源时间线、带自动排程的依赖关系、关键路径、基线、看板泳道和 WIP 限制,以及 iCalendar 和 MS Project XML 交换,需要注册版。
可以,通过注册版可选的 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 控件。
sgcPlanner .NET 包含在 sgcUI .NET Enterprise 版中,也作为单个软件包销售。两种许可都涵盖 WinForms、WPF 和 Avalonia,并附带完整的 C# 源代码和免费的二进制再分发。