Aynı sgcUI API'si ile WinForms ve WPF'den Avalonia'ya

sgcUI, ürün başına tek bir modeli paylaşan WinForms, WPF ve Avalonia için yerel denetimler sunar. Grid sütunları, grafik, planlayıcı verisi ve tema bir kez yazılır ve her ana bilgisayar için değişmeden derlenir; bu yüzden bir ekranı Avalonia'ya, onunla birlikte macOS ve Linux'a taşımak, ekran mantığını değil pencere kodunu ve denetim türlerini değiştirmek anlamına gelir. Bu set, üç ana bilgisayarda da derlenen ve kendi sınamasını geçen bir örnekten kodla bunun nasıl yapıldığını gösterir.

macOS ve Linux'ta da Çalışması Gereken Bir Windows Masaüstü Uygulaması

Grid, grafik ve zamanlayıcı içeren iş ekranları, korumak istediğiniz bir veri katmanı ve ekran mantığını yeni bir arayüz çerçevesinde yeniden yazma isteksizliği.

WinForms'tan

WinForms yalnızca Windows'ta çalışır. sgcUI ile bugün kullandığınız TsgcWinForms* denetimlerinin aynı üyelere sahip TsgcAvalonia* karşılıkları vardır. Yapılandırma kodu paylaşılan bir sınıf kitaplığına taşınır, form bir Avalonia penceresi olur ve DataSource, ItemsSource olur.

WPF'den

WPF de yalnızca Windows'ta çalışır. sgcUI denetimleri Avalonia'ya en yakın eşleşmedir: ikisi de ItemsSource ile bağlanır, ikisi de aynı sgc ad alanı URI'siyle XAML'de bildirilir ve asıl kod değişikliği arayüz iş parçacığı çağrısıdır.

Mevcut bir WPF uygulaması için olağan yol, satıcısının tanımladığı şekliyle "ikili uyumlu bir WPF çalışma zamanı" ve "yönetilen yüzey alanı boyunca API ve ikili uyumluluğu koruyan bir WPF çatalı" olan Avalonia XPF'tir. Yazım sırasında (2026-10-20) XPF, on iki ay güncelleme ve destek içeren, uygulama başına kalıcı lisanslar olarak satılıyor: uygulama başına 9.500 EUR'dan Internal (yalnızca kendi çalışanlarınıza dağıtım), uygulama başına 29.500 EUR'dan Business (macOS ve masaüstü Linux'a ticari dağıtım, gömülü Linux 21.250 EUR'luk bir ek) ve mobil veya tarayıcı için uygulama başına 124.500 EUR'dan başlayan Enterprise. Üçüncü taraf WPF paketleri XPF üzerinde koşullarla çalışabilir: XPF üçüncü taraf kitaplık notları, Win32 API şimlerinin "DevExpress denetimleri için gerekli" olduğunu, bazı DevExpress denetimlerinin "Windows dışı platformlarda kullanımdan kaldırılmış" olan System.Drawing.Common (GDI+) bileşenine bağlı olduğunu, Linux'ta DevExpress denetimlerinin libgdiplus gerektirdiğini ve "Sorunların en sık GDI veya WinForms bileşenlerini kullanan denetimlerde çıktığını" söylüyor. Avalonia'nın kendisi ücretsiz, MIT lisanslı bir arayüz çerçevesidir. .NET için sgcUI geliştirici başına lisanslanır, .NET Standard sürümü için €380 fiyatından başlar; WinForms, WPF ve Avalonia için tam C# kaynak koduyla, ücretsiz ikili dağıtımla ve uygulama başına ücret olmadan. Ücretsiz Community paketleri NuGet'tedir. (Alıntılar İngilizceden çevrilmiştir.)

Bir Model, Üç İnce Ana Bilgisayar

Her sgcUI ürününün ana bilgisayardan habersiz bir modeli vardır. WinForms, WPF ve Avalonia denetimleri onun üzerindeki ince görünümlerdir.

Ortak modeller

TsgcGridColumns, TsgcGridData, TsgcChart, TsgcPlannerData, TsgcPlannerSchedulerOptions, TsgcPivotEngine ve TsgcDiagramDocument üç ana bilgisayarda da aynı türlerdir. Onlara karşı yazılan kod her biri için değişmeden derlenir.

Aynı üye adları

Columns, Data, ShowFooter, GroupSummaries, GroupBy, SaveLayoutToString, LoadLayoutFromString, Chart, Options, View, Date, PrintSettings, CreatePrintSource, Print, ShowPrintPreview ve ExportToPDF, ayrıca OnCellClick, OnSelectionChange ve OnSortChange gibi grid olayları.

Aynı kaydedilmiş yerleşim

SaveLayoutToString ile kaydedilen bir grid yerleşimi her ana bilgisayarda aynı JSON metnidir. Örnekte üç ana bilgisayar yerleşimini bir dosyaya yazar ve üç dosyanın SHA-256 değeri aynıdır. Temalar (TsgcUITheme, sgcUIApplication.Theme, sgcUIApplication.AccentColor, yüksek karşıtlık) de ortaktır.

Her Ürünün Ana Bilgisayar Denetimi

Pratik kural: TsgcWinForms veya TsgcWpf önekini TsgcAvalonia ile değiştirin. İstisnalar tabloda işaretlidir.

Ürün WinForms WPF Avalonia
sgcGridTsgcWinFormsGridTsgcWpfGridTsgcAvaloniaGrid
sgcGrid bildirilen sütunkodda, Columns.AddTsgcWpfGridColumn (XAML)TsgcAvaloniaGridColumn (XAML)
sgcChartsTsgcWinFormsChart, TsgcWinFormsChartEditorTsgcWpfChart, TsgcWpfChartEditorTsgcAvaloniaChart, TsgcAvaloniaChartEditor
sgcPivotGridTsgcWinFormsPivotGrid, TsgcWinFormsPivotFieldListTsgcWpfPivotGrid, TsgcWpfPivotFieldListTsgcAvaloniaPivotGrid, TsgcAvaloniaPivotFieldList
sgcPlannerTsgcWinFormsScheduler, TsgcWinFormsGantt, TsgcWinFormsKanbanTsgcWpfScheduler, TsgcWpfGantt, TsgcWpfKanbanTsgcAvaloniaScheduler, TsgcAvaloniaGantt, TsgcAvaloniaKanban
sgcDiagramTsgcWinFormsDiagramView, TsgcWinFormsDiagramPalette, TsgcWinFormsDiagramMinimapTsgcWpfDiagramView, TsgcWpfDiagramPalette, TsgcWpfDiagramMinimapTsgcAvaloniaDiagramView, TsgcAvaloniaDiagramPalette, TsgcAvaloniaDiagramMinimap
sgcGaugesTsgcWinForms<Kind>GaugeTsgcWpf<Kind>GaugeTsgcAvalonia<Kind>Gauge
Kind şunlardan biridir: Radial, Linear, Digital, Compass, Clock, LED, LEDBar, ProgressRing, VUMeter veya Annunciator.
sgcDashboardTsgcWinFormsDashboardTsgcWpfDashboardTsgcAvaloniaDashboard
sgcDashboard kutucuklarıTsgcWinFormsDashboardTile, ...ChartTile, ...GridTile, ...GaugeTile, ...PivotTile, TsgcWinFormsKPICard ve TsgcWinFormsDashboardMapTileTsgcWpfDashboardTile, ...ChartTile, ...GridTile, ...GaugeTile, ...PivotTile, TsgcWpfKPICard. Harita kutucuğu yok.TsgcAvaloniaDashboardTile, ...ChartTile, ...GridTile, ...GaugeTile, ...PivotTile, TsgcAvaloniaKPICard. Harita kutucuğu yok.
sgcMapsSgcMapControl (ad alanı esegece.sgcMaps.WinForms)TsgcWpfMapTsgcAvaloniaMap
sgcEditorsTsgcWinForms<Editor>TsgcWpf<Editor>TsgcAvalonia<Editor>
Editor şunlardan biridir: ButtonEdit, CurrencyEdit, MaskEdit, SpinEdit, DatePicker, DateTimePicker, TimePicker, LookupEdit, SearchEdit, TokenEdit, Memo, ColorPicker, MonthCalendar, RadioGroup, CheckGroup, Rating veya RangeSlider.
sgcNavigationTsgcWinFormsNavigationBar, ...NavigationTabs, ...NavigationBreadcrumb, ...DockManagerTsgcWpfNavigationBar, ...NavigationTabs, ...NavigationBreadcrumb, ...DockManagerTsgcAvaloniaNavigationBar, ...NavigationTabs, ...NavigationBreadcrumb, ...DockManager
sgcToolbarTsgcWinFormsRibbon, TsgcWinFormsToolbar, TsgcWinFormsStatusBarTsgcWpfRibbon, TsgcWpfToolbar, TsgcWpfStatusBarTsgcAvaloniaRibbon, TsgcAvaloniaToolbar, TsgcAvaloniaStatusBar
sgcWizardTsgcWinFormsWizard, TsgcWinFormsStepperTsgcWpfWizard, TsgcWpfStepperTsgcAvaloniaWizard, TsgcAvaloniaStepper
sgcRichEditTsgcWinFormsRichEditTsgcWpfRichEditTsgcAvaloniaRichEdit
sgcPDF görüntüleyiciTsgcPDFViewerControlTsgcWpfPDFViewerTsgcAvaloniaPDFViewer
sgcReports tasarımcısıTsgcWinFormsReportDesignerTsgcWpfReportDesignerTsgcAvaloniaReportDesigner
sgcReports önizlemeTsgcReportPreviewVCL (bir WinForms Panel)TsgcWpfReportPreviewTsgcAvaloniaReportPreview
sgcUICoreTsgcWinFormsAIQueryBar, TsgcWinFormsValidationSummaryTsgcWpfAIQueryBar, TsgcWpfValidationSummaryTsgcAvaloniaAIQueryBar, TsgcAvaloniaValidationSummary

Ad alanı ürün başınadır (esegece.sgcGrid, esegece.sgcCharts, ...) ve üç ana bilgisayar için aynıdır; yalnızca esegece.sgcMaps.WinForms içindeki WinForms haritası farklıdır. Ana bilgisayar denetimleri esegece.<Product>.WinForms, .Wpf ve .Avalonia paketlerinde gelir; panonun WinForms harita kutucuğu esegece.sgcDashboard.Maps.WinForms içindedir. WPF ve Avalonia'da sgcReports dışındaki her ürün tek bir ad alanı URI'siyle XAML'de bildirilir, xmlns:sgc="https://www.esegece.com/sgcui"; sgcReports için bir clr-namespace eşlemesi kullanın.

Bir Taşımada Değişen Üyeler

Denetimlerdeki diğer her şey adını korur. Ana bilgisayarın göründüğü yerler bunlardır.

Konu WinForms WPF Avalonia
Bir listeyi grid'e bağlamaDataSource (ve DataMember)ItemsSource (DependencyProperty)ItemsSource (StyledProperty)
Grid bağlama üyeleriAutoGenerateColumns, KeyMember, SelectedItem, ItemsBinding ve ItemsWriteBack (Registered), üç ana bilgisayarda aynı
Geçerli öğe eşitlemeyokIsSynchronizedWithCurrentItemyok
Grid sütunları ve verisiColumns (TsgcGridColumns), Data (TsgcGridData)
Grafik modeliChart (TsgcChart)
Planlayıcı modeliData (TsgcPlannerData), Options (TsgcPlannerSchedulerOptions)
Temadenetimin Theme özelliği (TsgcUITheme; utDefault, sgcUIApplication.Theme değerini izler)aynısı, artı sgcUICore_Theme_Avalonia.sgcUIApplyThemeToWindow
Arayüz iş parçacığıControl.BeginInvokeDispatcher.BeginInvokeDispatcher.UIThread.Post
Uygulama başlangıcıApplication.Run(form)new Application().Run(window)bir tema içeren Application sınıfı ve StartWithClassicDesktopLifetime
Uygulamanın hedef çerçevesinet8.0-windows (ayrıca net472)net8.0-windows (ayrıca net472)net8.0, net9.0, net10.0

HOST Satırları ve SAME Satırları

Her alıntı, Registered ve Community sürümleri için Release olarak 0 uyarıyla derlenen ve WinForms, WPF ve Avalonia üzerinde kendi sınamasını geçen MigrateToAvalonia örneğinden kopyalanmıştır. Ana bilgisayar dosyalarında HOST işaretli bir satır üç ana bilgisayar arasında farklıdır, SAME işaretli bir satır hepsinde aynıdır.

Bir kez yazılır: ortak katman

Ortak sınıf kitaplığı yalnızca esegece.sgcGrid, esegece.sgcCharts, esegece.sgcPlanner ve esegece.sgcUICore model paketlerine başvurur, hiçbir zaman bir ana bilgisayar paketine değil. Gruplama ve özetli grid sütunları TsgcGridColumns üzerinden yapılandırılır:

Shared\TMigrateModel.cs
// the grid columns, grouped by Region, with a sum of Amount in the
// footer and in every group row; TsgcGridColumns is the Columns of
// TsgcWinFormsGrid, TsgcWpfGrid and TsgcAvaloniaGrid
public static void ConfigureGrid(TsgcGridColumns aColumns)
{
    aColumns.BeginUpdate();
    try
    {
        aColumns.Clear();
        aColumns.Add(nameof(TOrder.Id), "Order", TsgcGridDataType.gdtInteger).Width = 80;
        aColumns.Add(nameof(TOrder.Customer), "Customer").Width = 180;
        aColumns.Add(nameof(TOrder.Region), "Region").GroupIndex = 0;
        TsgcGridColumn oDate = aColumns.Add(nameof(TOrder.Date), "Date", TsgcGridDataType.gdtDateTime);
        oDate.Width = 110;
        oDate.DisplayFormat = "yyyy-mm-dd";
        TsgcGridColumn oAmount = aColumns.Add(nameof(TOrder.Amount), "Amount", TsgcGridDataType.gdtFloat);
        oAmount.Width = 120;
        oAmount.DisplayFormat = "#,##0.00";
        oAmount.SummaryType = TsgcGridSummaryType.gsuSum;
        oAmount.SummaryFormat = "\"Total: \"#,##0.00";
        aColumns.Add(nameof(TOrder.Status), "Status").Width = 100;
    }
    finally
    {
        aColumns.EndUpdate();
    }
}

Grafik bir TsgcChart modelidir, pasta serisi TsgcChartDataSource_Items üzerinden bir ObservableCollection ile canlı beslenir:

Shared\TMigrateModel.cs
// the chart model: one pie series fed by RegionTotals through the
// items data source (live: a changed Amount updates its slice)
Chart = new TsgcChart();
Chart.Title.Text = "Amount by region";
Chart.Title.Visible = true;
Chart.Legend.Position = TsgcChartLegendPosition.clpTop;
Pie = new TsgcChartSeries_Pie();
Pie.Title = "Amount";
Pie.Chart = Chart;
FChartSource = new TsgcChartDataSource_Items();
FChartSource.Series = Pie;
FChartSource.LabelMember = nameof(TRegionTotal.Region);
FChartSource.YMember = nameof(TRegionTotal.Amount);
FChartSource.Items = RegionTotals;

Uygulamanın her sgcUI denetimi için tek bir tema:

Shared\TMigrateModel.cs
// the theme of every sgcUI control of the application (their Theme is
// utDefault, so they follow sgcUIApplication.Theme), and one accent
public static void ApplyTheme()
{
    sgcUIApplication.Theme = TsgcUITheme.utLight;
    sgcUIApplication.AccentColor = 0xFF2563EB;
}

Tek ana bilgisayar hizmeti: arayüz iş parçacığına gönderme

Bağlı koleksiyonlar arayüz iş parçacığında değişir. Ortak katman ana bilgisayarı bilmez, bu yüzden gönderme çağrısını bir temsilci olarak alır:

Shared\TMigrateModel.cs
// aPost runs an action on the UI thread; it is the only host specific
// service of the layer (WinForms Control.BeginInvoke, WPF
// Dispatcher.BeginInvoke, Avalonia Dispatcher.UIThread.Post)
public TMigrateModel(Action<Action> aPost)
Shared\TMigrateModel.cs
// a feed on a worker thread: the order is built there and posted to the
// UI thread with aPost, because bound collections change on the UI thread
public Task AddOrderFromWorker()
{
    return Task.Run(() =>
    {
        TOrder oOrder = DoNewOrder();
        FPost(() => DoAdd(oOrder));
    });
}

Denetim alanları yalnızca türde farklılaşır

Önce: WinForms veya WPF türleri. Sonra: Avalonia türleri.

WinForms\TMigrateForm.cs
// HOST: the WinForms control types
private readonly TsgcWinFormsGrid FGrid;
private readonly TsgcWinFormsChart FChart;
private readonly TsgcWinFormsScheduler FScheduler;
Wpf\TMigrateWindow.cs
// HOST: the WPF control types
private readonly TsgcWpfGrid FGrid;
private readonly TsgcWpfChart FChart;
private readonly TsgcWpfScheduler FScheduler;
Avalonia\TMigrateWindow.cs
// HOST: the Avalonia control types
private readonly TsgcAvaloniaGrid FGrid;
private readonly TsgcAvaloniaChart FChart;
private readonly TsgcAvaloniaScheduler FScheduler;

Ekranı bağlama: her ana bilgisayarda aynı blok

İki satır HOST ile işaretlidir: arayüz iş parçacığı çağrısı ve liste bağlama. Gerisi üç dosyada aynı metindir.

WinForms\TMigrateForm.cs
// HOST: WinForms reaches the UI thread with Control.BeginInvoke
FModel = new TMigrateModel(aAction => BeginInvoke(aAction));

// SAME on every host: the shared columns, footer and group sums
TMigrateModel.ConfigureGrid(FGrid.Columns);
FGrid.ShowFooter = true;
FGrid.GroupSummaries = true;
// HOST: WinForms binds with DataSource (WPF and Avalonia: ItemsSource)
FGrid.DataSource = FModel.Orders;
// SAME on every host: the shared chart model and planner data
FChart.Chart = FModel.Chart;
TMigrateModel.ConfigureScheduler(FScheduler.Options);
FScheduler.Data = FModel.Planner;
FScheduler.View = TsgcPlannerSchedulerViewKind.psvWorkWeek;
FScheduler.Date = TMigrateModel.CS_WEEK;
Wpf\TMigrateWindow.cs
// HOST: WPF reaches the UI thread with Dispatcher.BeginInvoke
FModel = new TMigrateModel(aAction => Dispatcher.BeginInvoke(aAction));

// SAME on every host: the shared columns, footer and group sums
TMigrateModel.ConfigureGrid(FGrid.Columns);
FGrid.ShowFooter = true;
FGrid.GroupSummaries = true;
// HOST: WPF binds with ItemsSource (WinForms: DataSource)
FGrid.ItemsSource = FModel.Orders;
// SAME on every host: the shared chart model and planner data
FChart.Chart = FModel.Chart;
TMigrateModel.ConfigureScheduler(FScheduler.Options);
FScheduler.Data = FModel.Planner;
FScheduler.View = TsgcPlannerSchedulerViewKind.psvWorkWeek;
FScheduler.Date = TMigrateModel.CS_WEEK;
Avalonia\TMigrateWindow.cs
// HOST: Avalonia reaches the UI thread with Dispatcher.UIThread.Post
FModel = new TMigrateModel(aAction => Dispatcher.UIThread.Post(aAction));

// SAME on every host: the shared columns, footer and group sums
TMigrateModel.ConfigureGrid(FGrid.Columns);
FGrid.ShowFooter = true;
FGrid.GroupSummaries = true;
// HOST: Avalonia binds with ItemsSource, as WPF (WinForms: DataSource)
FGrid.ItemsSource = FModel.Orders;
// SAME on every host: the shared chart model and planner data
FChart.Chart = FModel.Chart;
TMigrateModel.ConfigureScheduler(FScheduler.Options);
FScheduler.Data = FModel.Planner;
FScheduler.View = TsgcPlannerSchedulerViewKind.psvWorkWeek;
FScheduler.Date = TMigrateModel.CS_WEEK;

Uygulama başlangıcı

Başlangıç kodu doğası gereği ana bilgisayar kodudur. Tema çağrısı üç ana bilgisayarda aynıdır.

WinForms\Program.cs
// HOST: the WinForms application start
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// SAME on every host: one theme for every sgcUI control
TMigrateModel.ApplyTheme();
TMigrateForm oForm = new TMigrateForm(vTest ? vFolder : null);
Application.Run(oForm);
return oForm.ExitCode;
Wpf\Program.cs
// HOST: the WPF application start
Application oApp = new Application { ShutdownMode = ShutdownMode.OnMainWindowClose };
// SAME on every host: one theme for every sgcUI control
TMigrateModel.ApplyTheme();
TMigrateWindow oWindow = new TMigrateWindow(vTest ? vFolder : null);
oApp.Run(oWindow);
return oWindow.ExitCode;
Avalonia\Program.cs
// HOST: Avalonia needs an Application class with a theme
internal sealed class TMigrateApp : Application
{
    public static string TestFolder;

    public override void Initialize()
    {
        Styles.Add(new FluentTheme());
        RequestedThemeVariant = ThemeVariant.Light;
    }

    public override void OnFrameworkInitializationCompleted()
    {
        // SAME on every host: one theme for every sgcUI control
        TMigrateModel.ApplyTheme();
        IClassicDesktopStyleApplicationLifetime oDesktop =
            ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
        if (oDesktop != null)
            oDesktop.MainWindow = new TMigrateWindow(TestFolder);
        base.OnFrameworkInitializationCompleted();
    }
}

Ekran Başına Sekiz Adım

Windows uygulaması her adımdan sonra çalışmaya devam eder, böylece taşıma bir seferde bir ekran olarak yapılabilir.

1

Ortak katmanı ayıklayın

Veriyi ve denetim yapılandırmasını yalnızca sgcUI model paketlerine (esegece.sgcGrid, esegece.sgcCharts, esegece.sgcPlanner, esegece.sgcUICore) başvuran bir sınıf kitaplığına taşıyın. Bunu TsgcGridColumns, TsgcChart, TsgcPlannerData ve TsgcPlannerSchedulerOptions üzerinden yazın.

2

Windows'tan çağırın

Mevcut WinForms veya WPF ekranının bu kitaplığı çağırmasını sağlayın. Windows'ta eskisi gibi çalışmaya devam eder.

3

Avalonia uygulamasını oluşturun

Avalonia.Desktop, Avalonia.Themes.Fluent ve ihtiyaç duyduğunuz esegece.<Product>.Avalonia paketleriyle bir net8.0 projesi.

4

Denetim türlerini değiştirin

TsgcWinForms* ve TsgcWpf*, eşleştirme tablosunda listelenen istisnalarla TsgcAvalonia* olur.

5

Pencereyi taşıyın

TableLayoutPanel içeren bir Form veya Grid içeren bir WPF Window, Grid içeren bir Avalonia Window olur. WPF XAML dosyası .axaml olur ve sgc ad alanı URI'sini korur.

6

Yalnızca WinForms: bağlama

DataSource yerine ItemsSource kullanın. WPF kodu zaten ItemsSource kullanır.

7

Arayüz iş parçacığı çağrısı

BeginInvoke veya Dispatcher.BeginInvoke, Dispatcher.UIThread.Post olur.

8

Her ana bilgisayarı denetleyin

Örneğin /selftest komutunun yaptığı gibi her ana bilgisayarda aynı denetimleri çalıştırın ve kaydedilen grid yerleşimi JSON'unu karşılaştırın: aynı metin olmalıdır.

Birebir Eşleşmeyenler

Taşımayı planlamadan önce bunu okuyun.

MigrateToAvalonia

Bölgeye göre gruplanmış 40 siparişlik bir grid, bölgeye göre tutarın pasta grafiği ve bir çalışma haftası zamanlayıcısı içeren tek ekran; tek bir ortak katmandan üç ana bilgisayarda gösterilir.

Nerede

sgcUI .NET demolarında, sgcUI_Demos.sln çözümünün Suite\MigrateToAvalonia klasöründe: Shared, WinForms, Wpf, Avalonia ve bir readme.html. Demo indirmesinde projeler sgcUI NuGet paketlerine başvurur.

Nasıl çalıştırılır

dotnet build Avalonia\sgcUIMigrate.Avalonia.csproj -c Release ve aynısını WinForms\sgcUIMigrate.WinForms.csproj ile Wpf\sgcUIMigrate.Wpf.csproj için yapın. Community sürümü için -p:SgcCommunity=true ekleyin. Avalonia ana bilgisayarı macOS ve Linux'ta da çalışır.

Kendini sınama

sgcUIMigrate.<Host>.exe /selftest [folder] satırları, gruplamayı, pastayı, zamanlayıcıyı, bir çalışan iş parçacığında eklenen bir siparişi ve kaldırılan bir siparişi denetler, migrate_selftest_<host>.txt ve migrate_layout_<host>.json dosyalarını yazar ve başarısız denetim sayısıyla çıkar. 13 denetimin hepsi üç ana bilgisayarda geçer ve üç yerleşim dosyası bayt bayt aynıdır.

Her iki yola da adil olmak gerekirse: XPF, mevcut bir WPF uygulamasını kodu ve denetimleri büyük ölçüde olduğu gibi macOS ve Linux'ta çalıştırmayı hedefler ve sgcUI bunu yapmaz. sgcUI ile her ekranın pencere kodunu Avalonia'ya taşırsınız ve ekranın sgcUI parçaları değişmeden aktarılır. Başka satıcıların denetimleriyle oluşturulmuş ekranlarda, taşımadan önce Windows'ta bu denetimlerin değiştirilmesi gerekir. Ekranlarınız sgcUI grid'ini, grafiklerini, planlayıcısını, pivotunu, diyagramını ve yukarıdaki diğer ürünleri kullanıyorsa ya da bunlara geçebiliyorsa ve tam kaynak koduyla, arada çalışma zamanı katmanı olmayan yerel Avalonia denetimleri istiyorsanız yol sgcUI'dir. Ürünler ve sürümler için sgcUI ürün sayfasına bakın.

En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

İlk Ekranınızı Bugün Taşıyın

NuGet'ten ücretsiz Community paketlerini ya da her özellik ve tam kaynak kodu için Registered paketlerini ekleyin ve ilk ekranınızı yanında MigrateToAvalonia örneğiyle taşıyın.