Avalonia 스케줄러, Gantt, 칸반을 네이티브 컨트롤로

sgcPlanner는 캘린더 스케줄러, Gantt 차트, 칸반 보드를 네이티브 컨트롤로 Avalonia 12에 제공합니다. TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanban입니다. Windows, Linux, macOS에서 실행되고, XAML에서 뷰 모델에 바인딩되며, 하나의 작업 목록을 공유합니다. 그래서 보드에 놓은 카드가 Gantt의 막대와 캘린더의 이벤트도 함께 옮깁니다. 중간에 WPF 런타임이 없고, 같은 컨트롤이 WinForms, WPF, Delphi에도 있습니다.

Avalonia 앱 안의 계획 스위트

하나의 TsgcPlannerData 객체 위에 세 가지 컨트롤이 있습니다. 창에 하나, 둘, 또는 세 개 모두 배치할 수 있습니다.

ProjectPlanner 데모: 같은 작업을 칸반 보드, Gantt 차트, 스케줄러에 표시
ProjectPlanner 데모: 하나의 프로젝트를 칸반 보드, Gantt 차트, 스케줄러에 표시합니다. ProjectPlannerAvalonia는 같은 프로젝트를 Avalonia 창에 보여 줍니다.

캘린더 보기

View는 TsgcAvaloniaScheduler를 일, 근무 주, 주, 월, 아젠다, 리소스 타임라인, 연도 사이에서 전환합니다. 연도 보기는 12개의 미니 달력이며, 날짜를 더블클릭하면 일 보기로 열립니다. Options.GroupByResource는 일 보기에서 사람마다 열 그룹을 만들어 줍니다.

드래그로 만들고 편집

시간 그리드의 빈 곳을 드래그하면 Options.SlotMinutes에 맞춘 이벤트가 만들어지고, 시작, 종료, 리소스와 함께 OnItemCreate가 발생합니다. 이벤트는 마우스로 이동하고 크기를 바꿀 수 있으며, InplaceEdit를 사용하면 F2로 제목을 제자리에서 편집합니다.

반복

항목은 FREQ=WEEKLY;BYDAY=TU 같은 iCalendar 규칙을 RecurrenceRule에 보관하고, 데이터는 보이는 기간의 시리즈를 개별 회차로 펼칩니다. 회차를 드래그하면 OnRecurrenceEdit가 발생하며, 여기서 prsOccurrence, prsSeries, prsCancel 중에서 선택합니다. 기본적으로 드래그는 해당 회차만 옮깁니다.

알림과 시간대

TsgcPlannerReminders는 ReminderMinutes 시점이 된 항목을 알려 주며, Dismiss와 Snooze를 제공합니다. 모든 항목은 자체 TimeZone을 가질 수 있고, Data.DisplayTimeZone은 사용자가 고른 시간대로 전체 캘린더를 표시합니다.

Gantt 차트

TsgcAvaloniaGantt에는 열, 요약, 마일스톤, 진행률, 자동 일정 계산이 있는 종속성, 크리티컬 패스, 기준선을 갖춘 작업 그리드가 있습니다. TimeScale.TierCount는 3단 타임스케일을 만들고, ShowHistogram은 과할당을 크리티컬 색상으로 칠하는 리소스 부하 창을 추가합니다.

칸반 보드

TsgcAvaloniaKanban은 항목을 상태별 열의 카드로 표시합니다. 카드를 놓으면 데이터의 MoveItem이 호출되어 모든 보기에 한 번 알리므로, Gantt와 스케줄러가 새 상태로 다시 그려집니다. 스윔레인과 WIP 제한은 Registered 에디션에 있습니다.

리소스와 용량

리소스에는 이름, 색상, 이니셜이 있습니다. sgcUI 2026.11의 새 기능으로, TsgcPlannerResource.Capacity가 히스토그램의 부하를 조정하고 용량선을 옮기며 그 위의 과할당을 표시합니다. 값은 JSON에 저장되고 Microsoft Project 파일에서는 MaxUnits로 저장됩니다.

실행 취소와 다시 실행

Data.Undo는 Undo와 Redo로 드래그나 편집을 한 단계로 되돌립니다. CanUndo, CanRedo, UndoCaption, RedoCaption으로 버튼과 툴팁을 제어합니다.

가져오기, 내보내기, 인쇄

데이터는 JSON을 불러오고 저장하며 DataTable을 읽습니다. Registered 에디션은 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을 따르며, Gantt는 MirrorTimeline으로 타임라인을 반전하거나 왼쪽에서 오른쪽으로 유지할 수 있습니다. 각 컨트롤에는 Avalonia 자동화 피어와 키보드 탐색이 있어 스크린 리더가 보기, 항목, 슬롯을 읽어 줍니다. 접근성은 모든 에디션에서 기본으로 켜져 있습니다.

12개 언어

sgcUI 2026.11의 새 기능으로, 최종 사용자용 텍스트는 영어, 스페인어, 독일어, 프랑스어, 이탈리아어, 네덜란드어, 폴란드어, 포르투갈어(브라질), 터키어, 일본어, 한국어, 중국어의 내장 언어 팩에서 가져옵니다. sgcUILang.SetLanguage는 로캘 또는 현재 UI 컬처를 뜻하는 "auto"를 받습니다.

Outlook, Google, CalDAV 동기화

Registered 에디션의 선택 사항인 esegece.sgcPlanner.sgcWebSockets 브리지는 Microsoft Graph를 통한 Microsoft 365와 Outlook.com의 Outlook 캘린더(TsgcPlannerGraphSync), Google Calendar(TsgcPlannerGoogleSync), Nextcloud, iCloud, Fastmail, Radicale 같은 모든 CalDAV 서버(TsgcPlannerCalDAVSync)와 데이터를 양방향으로 동기화합니다. TsgcPlannerICalSubscription은 읽기 전용 iCalendar URL을 병합합니다. 이 브리지는 sgcWebSockets를 사용합니다.

Smart Paste

스케줄러에서 Ctrl+Shift+V를 누르면 붙여넣은 텍스트가 회의로 바뀝니다. "이름: 값" 같은 줄은 내장 파서가 읽고, AIProvider는 이메일 같은 자유 텍스트를 위해 원하는 LLM을 호출하는 TsgcUIAIEventProvider를 받습니다. Smart Paste는 Community 에디션에도 있습니다.

하나의 뷰 모델에 바인딩된 스케줄러와 Gantt

FluentTheme과 컴파일된 바인딩을 사용하는 net8.0의 작은 Avalonia 12 앱에서 복사했으며, using 줄과 네임스페이스는 생략했습니다. 이 앱은 sgcPlanner의 Registered 빌드와 Community 빌드 모두에서 경고 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) });
    }
}

창: 같은 컬렉션 위의 두 가지 보기

필드 맵은 어느 멤버가 ID, 제목, 날짜, 담당자, 규칙을 담고 있는지 컨트롤에 알려 줍니다.

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분에 맞추고, 드래그로 만들어지는 이벤트에 이름을 붙이고, Gantt에 3단 타임스케일을 설정합니다.

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를 참조합니다. 반복은 Registered 기능이므로 이 경우 스탠드업이 한 번만 표시됩니다. 애플리케이션은 스타일에 new FluentTheme()을 추가하고 창에 DataContext = new TTeamViewModel()을 설정합니다.

실행 환경

하나의 플래너 모델, 모든 호스트에서 같은 보기.

호스트 컨트롤 대상
Avalonia 12TsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanbanWindows, Linux, macOS의 net8.0, net9.0, net10.0
WinForms와 WPFTsgcWinFormsScheduler, Gantt와 칸반, 그리고 대응하는 WPF 컨트롤Avalonia와 같은 라이선스의 .NET
Delphi와 C++BuilderTsgcVCLScheduler, TsgcFMXScheduler와 대응하는 Gantt와 칸반 컨트롤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 컨트롤
스케줄러, Gantt, 칸반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에서 프리미엄 컨트롤의 전체 소스모든 Registered 라이선스에 전체 C# 소스 코드 포함
무료 등급 Community, 2026-04-07 이후 신규 가입자는 비상업적 용도만 가능Community NuGet 패키지, 매출 EUR 1,000,000 미만이고 개발자 5명 이하이면 상업적 용도로도 사용 가능

다른 방법에도 공정하게 말하면, XPF는 기존 WPF 애플리케이션을 거의 그대로 macOS와 Linux에서 실행하는 것을 목표로 하는데, sgcPlanner는 그렇게 하지 않습니다. Avalonia Pro는 프리미엄 컴포넌트와 Hot Reload, DevTools 같은 벤더 도구를 제공하지만, sgcUI는 이를 제공하지 않습니다. sgcPlanner는 같은 창에서 Avalonia Pro 컨트롤과 나란히 실행됩니다.

Community 또는 Registered

두 에디션 모두 같은 세 가지 컨트롤을 갖고 있습니다. Registered 에디션은 고급 계획 기능과 소스 코드를 추가합니다.

Community, 무료

NuGet의 esegece.sgcPlanner.Avalonia.Community는 연간 총매출이 EUR 1,000,000 미만이고 개발자가 5명 이하인 개인과 조직에게 상업용과 비상업용 프로젝트 모두 무료입니다. 일, 근무 주, 주, 월, 아젠다 보기, 드래그를 지원하는 Gantt와 칸반, 요약, 마일스톤, 진행률, 리소스별 그룹화, DataTable과 JSON 데이터, Smart Paste, 인쇄, 창 없이 만드는 PNG와 SVG 출력을 제공합니다.

Registered

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

다섯 명 팀의 3주치 회의: 모든 보기, 제목 제자리 편집, 실행 취소와 다시 실행, Dismiss와 Snooze가 있는 알림, 항목별 시간대, 반복되는 스탠드업과 동기화, 드래그로 만들기, 리소스별 그룹화, Smart Paste.

ProjectPlannerAvalonia

웹사이트 재출시 프로젝트를 Gantt 차트, 칸반 보드, 주 보기에 한꺼번에 표시하며 모두 같은 데이터에 바인딩됩니다. To do에서 Done으로 카드를 드래그하면 Gantt 막대와 캘린더 이벤트가 녹색으로 바뀝니다. 3단 타임스케일, 리소스 히스토그램, 실행 취소가 포함됩니다.

sgcUI 데모를 보거나 sgcPlanner 제품 페이지에서 모든 기능을 읽어 보세요.

Avalonia 스케줄러 FAQ

스케줄러는 네이티브 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는 멤버 이름을 ID, 제목, 시작, 종료, 리소스, 상태, 반복 및 기타 항목 필드에 매핑합니다. SelectedItem은 양방향으로 바인딩되며, 컨트롤에서 드래그하거나 편집하면 새 값이 객체에 다시 기록됩니다. x:DataType을 사용하는 컴파일된 바인딩도 동작합니다.

Avalonia 스케줄러의 무료 에디션이 있나요?

예. esegece.sgcPlanner.Avalonia.Community는 연간 총매출이 EUR 1,000,000 미만이고 개발자가 5명 이하인 개인과 조직에게 무료입니다. 일, 근무 주, 주, 월, 아젠다 보기와 Gantt, 칸반 보드가 있습니다. 반복, 리소스 타임라인, 자동 일정 계산이 있는 종속성, 크리티컬 패스, 기준선, 칸반 스윔레인과 WIP 제한, iCalendar와 MS Project XML 교환에는 Registered 에디션이 필요합니다.

Avalonia 스케줄러를 Outlook, Google Calendar, CalDAV와 동기화할 수 있나요?

예. sgcWebSockets를 사용하는 Registered 에디션의 선택 사항인 esegece.sgcPlanner.sgcWebSockets 브리지 패키지를 통해 가능합니다. TsgcPlannerGraphSync는 Microsoft Graph를 통해 Microsoft 365 또는 Outlook.com의 Outlook 캘린더와, TsgcPlannerGoogleSync는 Google 캘린더와, TsgcPlannerCalDAVSync는 Nextcloud, iCloud, Fastmail, Radicale 같은 CalDAV 캘린더와 데이터를 양방향으로 동기화합니다. TsgcPlannerICalSubscription은 읽기 전용 iCalendar URL을 병합합니다. 이 브리지는 데이터 객체 위에서 동작하므로 WinForms와 WPF 컨트롤은 물론 Avalonia 컨트롤에서도 쓸 수 있습니다.

Avalonia용 sgcPlanner는 어떤 sgcUI 에디션에 포함되나요?

sgcPlanner .NET은 sgcUI .NET Enterprise 에디션에 포함되며 단일 패키지로도 판매됩니다. 두 라이선스 모두 WinForms, WPF, Avalonia를 포함하며, 전체 C# 소스 코드와 바이너리 무료 재배포가 제공됩니다.

최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

Avalonia 앱에 스케줄러를 추가하세요

NuGet의 무료 Community 패키지로 시작하거나, 반복, 타임라인, 캘린더 동기화, 전체 소스 코드를 갖춘 Registered 패키지로 시작한 다음, 앱 옆에서 TeamSchedulerAvalonia 데모를 열어 보세요.