Avalonia Docking ve Yerel Bir Dock Yöneticisi

TsgcAvaloniaDockManager, bir Avalonia 12 penceresini IDE tarzı bir çalışma alanına dönüştürür. Araç panelleri dört kenara yerleşir, orta bölüm sekmeli bir belge alanıdır ve kullanıcı başlıkları ile sekmeleri bırakma kılavuzlarına sürükler, panelleri kenarlara otomatik gizler ya da kendi pencerelerinde yüzdürür. Her panel kendi Avalonia denetimlerinizden birini barındırır ve tüm düzen JSON olarak kaydedilir. Dock yöneticisi, sgcUI 2026.11 ile gelen yeni sgcNavigation ürününün parçasıdır.

Avalonia Uygulamanızın İçinde Bir Docking Çalışma Alanı

Bir pencereye yerleştirilen tek bir denetim. Panelleri kodla eklersiniz, her birine kendi denetiminizi verirsiniz ve kullanıcı bunları düzenler.

Solda sekmeli Explorer ve Search, otomatik gizlenen bir Toolbox şeridi, dört belge sekmesi, sağda Properties ve altta Output içeren dock alanı; Output sürüklenirken belgelerin sağ yarısında bırakma kılavuzları ve önizleme dikdörtgeni görünür
Output paneli sürüklenirken sgcNavigation dock yöneticisi: pusula, kenar kılavuzları ve önizleme dikdörtgeni.

Araç panelleri ve belgeler

Her TsgcDockPanel bir Name, bir Caption, bir simge, bir Kind (dpkTool veya dpkDocument) ve gösterdiği Control değerine sahiptir. Araç panelleri Placement kenarında, DockSize genişliğinde başlar ve aynı GroupName değerine sahip paneller birlikte sekme olur.

Kendi denetimleriniz

Bir panelin içeriği sıradan bir Avalonia Control nesnesidir. Dock alanının mantıksal ve görsel alt öğesi olur, böylece DataContext pencerenizden akar; paneli etkin olduğu sürece düzenlenir ve gösterilir. Gizli bir panel denetimini gizli bir alt öğe olarak korur.

Önizlemeli bırakma kılavuzları

Bir başlık veya sekme sürüklenirken, imlecin altındaki grupta beliren bir pusula o grubu bir kenardan böler veya paneli içine sekme olarak ekler, kenar kılavuzları paneli tüm alanın bir kenarına yerleştirir ve vurgu renginde bir önizleme dikdörtgeni kaplayacağı yeri gösterir. Esc sürüklemeyi iptal eder.

Ayırıcılar

Gruplar, aralarında ayırıcılar bulunan iç içe bölmelerde yan yana veya üst üste durur. Bir sürükleme komşuları anında yeniden boyutlandırır ve her grup en az MinPanelSize kadar kalır. SplitterSize ayırıcıların genişliğini belirler.

Otomatik gizleme açılır panelleri

Sabitleme düğmesi bir araç panelini kendi kenarındaki şeride gönderir. Sekmesinin üzerinde AutoHideDelay milisaniye beklemek ya da tıklamak paneli içeriğin üzerinde açılır panel olarak kaydırır ve kullanıcı başka yerde çalışınca geri kayar. Kodda Model.SetAutoHide aynı işi yapar.

Yüzen pencereler

Bir paneli kılavuzlardan uzağa bırakın, başlığına çift tıklayın ya da menüsünden Float seçin; panel, pencereniz tarafından sahiplenilen, görev çubuğunun dışında kalan çerçevesiz bir Avalonia penceresine taşınır. Yüzen pencere kendi ağacını taşır, böylece daha fazla panel buna yerleşebilir. Her yüzen pencere kendi monitörünün ölçeğini kullanır.

Belge grupları

Belge alanında sabitlenmiş ve değiştirilmiş sekmeler, kapatma düğmeleri, bir yeni sekme düğmesi (DocumentShowNewButton, OnNewDocument) ve bir sekme listesi düğmesi olan sekme şeritleri bulunur. Bir belge sekmesini bir kenar koluna sürüklemek onu yeni bir belge grubuna böler, bir sekmeye çift tıklamak grubunu büyütür.

Dock kısayolları ve panel menüleri

Ctrl+F6 belgeler arasında, Alt+F7 araç panelleri arasında geçiş yapar, Shift+Esc etkin araç panelini gizler ve Alt+Minus Float, Dock, Auto Hide, Hide ve Close seçeneklerini içeren panel menüsünü açar. Ctrl+Tab, Ctrl+W ve Ctrl+F4 de dock kısayolları olarak işlenir. TsgcAvaloniaCommandPalette ile dock yöneticisi panel başına bir Window komutu da listeler.

Erişilebilirlik, RTL ve HiDPI

Ekran okuyucular alanı UI Automation üzerinden "Dock site" adlı bir bölme olarak, gruplar için bölmeler, şeritler için sekme öğeleri ve ayırıcılar için aralık değerli ayırıcılar olarak görür. FlowDirection sağdan sola olduğunda tüm alan aynalanır. Arayüz, pencerenin işleme ölçeğinde çizilir.

JSON olarak düzen

SaveLayout, SaveLayoutToFile ve SaveLayoutToStream yerleşimi yazar, LoadLayout yöntemleri onu geri okur ve yüzen pencereleri ekranların çalışma alanına sığdırır. JSON metni Delphi modelininkiyle aynıdır. OnRestorePanel, kayıtlı bir düzenin adını verdiği ve oturumunuzun henüz açmadığı bir panelin denetimini oluşturur.

Temalar, Fluent dahil

Theme dock yöneticisini açık, koyu, yüksek karşıtlıklı ve özel temalar arasında değiştirir, AccentColor etkin başlığın vurgu rengini belirler. sgcUIApplication.ThemePreset değerini Fluent ön ayarına getirirseniz dock yöneticisi, diğer tüm sgcUI denetimleri gibi WinUI 3 renkleriyle çizilir.

Yerelleştirilmiş metinler

Dock arayüzünün başlıkları (Close, Auto Hide, Maximize, Float, Dock, Hide, "No open documents" ve ekran okuyucuların duyduğu adlar) sgcUILang üzerinden geçer ve sgcUI çeviri paketleri İspanyolca, Almanca, Fransızca, İtalyanca, Felemenkçe, Lehçe, Portekizce, Türkçe, Japonca, Korece ve Çinceyi kapsar.

Bir Avalonia 12 Penceresinde Docking

Bu, FluentTheme kullanan, net8.0 üzerindeki küçük bir Avalonia 12 uygulamasının tam penceresidir. Güncel sgcNavigation kaynaklarına, yani sgcUI 2026.11 koduna karşı 0 hata ve 0 uyarıyla derlenmiştir.

XAML

sgcUI Avalonia derlemeleri denetimlerini tek bir ad alanı URI'sine eşler, böylece sgc öneki TsgcAvaloniaDockManager bileşenini bulur. Dock yöneticisi pencereyi doldurur:

MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sgc="https://www.esegece.com/sgcui"
        x:Class="DockSample.MainWindow"
        Title="Avalonia docking" Width="1100" Height="720">
  <sgc:TsgcAvaloniaDockManager x:Name="dockManager"
                               DocumentShowNewButton="True"
                               SplitterSize="5"
                               AutoHideDelay="400"/>
</Window>

Paneller, otomatik gizleme ve kayıtlı düzen

Üç araç paneli ve iki belge BeginUpdate ile EndUpdate arasında eklenir, böylece bir kez yerleştirilirler. Output paneli otomatik gizli başlar, + düğmesi yeni bir belge açar ve düzen pencere kapanırken kaydedilir, yeniden açılırken yüklenir:

MainWindow.axaml.cs
using System;
using System.IO;
using Avalonia.Controls;
using esegece.sgcNavigation;

namespace DockSample
{
    public partial class MainWindow : Window
    {
        private readonly string FLayoutFile = Path.Combine(AppContext.BaseDirectory, "layout.json");
        private int FUntitled;

        public MainWindow()
        {
            InitializeComponent();

            // three tool panels and two documents, placed once at EndUpdate
            dockManager.Panels.BeginUpdate();
            try
            {
                AddTool("Explorer", new TreeView(), TsgcDockPlacement.dplLeft, 240);
                AddTool("Properties", new StackPanel(), TsgcDockPlacement.dplRight, 260);
                AddTool("Output", new TextBox { IsReadOnly = true }, TsgcDockPlacement.dplBottom, 180);
                AddDocument("main.cs").Pinned = true;
                AddDocument("readme.md");
            }
            finally
            {
                dockManager.Panels.EndUpdate();
            }

            // the Output panel starts auto hidden at the bottom edge
            dockManager.Model.SetAutoHide(dockManager.Model.FindPanel("Output"), true);

            // the + button of the document area
            dockManager.OnNewDocument = (s, aPanel) => AddDocument("Untitled " + (++FUntitled));
            // a saved layout names a document this session has not opened yet
            dockManager.OnRestorePanel = DockRestorePanel;

            // floats show with the window, so load the layout once it is open
            Opened += (s, e) =>
            {
                if (File.Exists(FLayoutFile))
                    dockManager.LoadLayoutFromFile(FLayoutFile);
            };
            Closing += (s, e) => dockManager.SaveLayoutToFile(FLayoutFile);
        }

        private TsgcDockPanel AddTool(string aName, Control aControl, TsgcDockPlacement aPlacement, int aSize)
        {
            TsgcDockPanel oPanel = dockManager.Panels.Add();
            oPanel.Name = aName;
            oPanel.Caption = aName;
            oPanel.Control = aControl;
            oPanel.Placement = aPlacement;
            oPanel.DockSize = aSize;
            return oPanel;
        }

        private TsgcDockPanel AddDocument(string aName)
        {
            TsgcDockPanel oPanel = dockManager.Panels.Add();
            oPanel.Name = aName;
            oPanel.Caption = aName;
            oPanel.Kind = TsgcDockPanelKind.dpkDocument;
            oPanel.Control = new TextBox { AcceptsReturn = true };
            return oPanel;
        }

        private void DockRestorePanel(object Sender, TsgcDockPanel aPanel, ref bool aAccept)
        {
            aAccept = aPanel.Kind == TsgcDockPanelKind.dpkDocument;
            if (aAccept)
                aPanel.Control = new TextBox { AcceptsReturn = true };
        }
    }
}

Fluent görünümü

App.Initialize içindeki tek bir satır, dock yöneticisi dahil uygulamanın tüm sgcUI denetimlerini Fluent ön ayarına geçirir:

App.axaml.cs
public override void Initialize()
{
    AvaloniaXamlLoader.Load(this);
    // every sgcUI control, the dock manager included, paints with the Fluent preset
    sgcUIApplication.ThemePreset = sgcUICore_Theme.CS_UI_THEME_FLUENT;
}

Kodda DockPanel, FloatPanel, ClosePanel, ShowPanel ve ActivatePanel kullanıcının fareyle yaptığını yapar. OnPanelDock ilk tetiklenir ve bir yerleştirme, yüzdürme ya da otomatik gizleme değişikliğini reddedebilir, OnPanelClose ise bir paneli açık tutabilir. Diğer sgcNavigation olayları gibi bunlar da kodda atanan delegate özellikleridir.

Tek Docking Modeli, Beş Arayüz Çerçevesi

Avalonia dock yöneticisi, sgcNavigation'ın WinForms, WPF ve Delphi üzerinde de kullandığı bir modelin tek bir görünümüdür.

Çerçeve Denetim Notlar
Avalonia 12TsgcAvaloniaDockManagernet8.0, net9.0 ve net10.0 için NuGet esegece.sgcNavigation.Avalonia; Windows, Linux ve macOS üzerinde. Yüzen pencereler klasik masaüstü yaşam döngüsünü gerektirir.
WPFTsgcWpfDockManagerAynı model, aynı paneller, aynı olaylar.
WinFormsTsgcWinFormsDockManagerAynı model, aynı paneller, aynı olaylar.
Delphi VCLTsgcVCLDockManagerDelphi modeli aynı JSON düzen metnini yazar.
Delphi FireMonkeyTsgcFMXDockManagerDelphi modeli aynı JSON düzen metnini yazar.

Beşi de TsgcDockManagerModel üzerinde çalışır; böylece bir Delphi masaüstü uygulaması ile bir Avalonia uygulaması sunan ekip tek bir docking tasarımını ve tek bir düzen biçimini korur. WinForms, WPF ve Avalonia her sgcUI .NET sürümünde bulunur.

Dock Yöneticisinin Dahil Olduğu Yerler

Registered sürümü

Dock yöneticisi, yüzen pencereleri, belge alanı ve düzen kalıcılığı .NET için sgcNavigation Registered sürümünün parçasıdır. sgcNavigation .NET'i tekil paket olarak satın alın ya da her biri geliştirici başına lisanslanan sgcUI .NET Standard, Professional ve Enterprise sürümlerinde edinin.

Community paketi

sgcNavigation'ın ücretsiz Community paketinde gezinti çubuğu ve aramalı ağacı gibi sgcNavigation'ın geri kalanı bulunur, ancak dock yöneticisi ve komut paleti bulunmaz. Docking için Registered paketlerini kullanın.

sgcNavigation mı, Dock Kitaplığı mı?

Avalonia docking için arama yaparsanız Dock projesini de bulursunuz; bu, Avalonia için açık kaynaklı bir docking projesidir. Bu sayfa onunla özellik karşılaştırması yapmaz, bu yüzden ikisini de kendi gereksinimlerinize göre değerlendirin.

DockingShellAvalonia

Windows, Linux ve macOS üzerinde Avalonia için bir docking kabuğu: solda Explorer ağacı, sağda Properties, altta otomatik gizli Output ve sabitlenmiş ile değiştirilmiş sekmeleri olan metin belgeleri.

Neler gösterir

Bir başlığı ya da sekmeyi kılavuzlara sürükleyin, yüzdürmek için onlardan uzağa bırakın veya bir araç panelini otomatik gizlemek için sabitleyin. Komut paleti (Ctrl+Shift+P) panel başına bir Window komutu listeler ve bir onay kutusu koyu temayı açar.

Düzen kalıcılığı

Düzen pencere kapanırken DockingShell.layout.json dosyasına kaydedilir, sonraki başlatmada yüklenir ve Reset layout ilk düzene döner. Kayıtlı bir belge OnRestorePanel aracılığıyla yeni bir metin kutusu alır.

Nerede

sgcUI .NET demolarında, Navigation\DockingShellAvalonia klasöründe; WinForms DockingShell ve DockingShellWpf demolarının yanında. dotnet run -- --test result.txt kendi kendine denetimini çalıştırır.

sgcUI demolarına bakın veya docking yardım konusunu okuyun.

Avalonia Docking Soruları

Dock panellerinde kendi Avalonia denetimlerimi barındırabilir miyim?

Evet. Her TsgcDockPanel nesnesinin Control değeri sıradan bir Avalonia Control nesnesidir; bir TreeView, bir TextBox, bir UserControl ya da kendi görünümlerinizden biri olabilir. Dock alanının alt öğesi olur, böylece DataContext pencereden akar ve dock yöneticisi onu paneli etkin olduğu sürece düzenler ve gösterir. Dock yöneticisi onu asla serbest bırakmaz.

Yüzen pencereler Linux ve macOS üzerinde çalışır mı?

Yüzen pencereler Avalonia pencereleridir, bu yüzden Windows, Linux ve macOS üzerindeki bir Avalonia masaüstü uygulamasının kullandığı klasik masaüstü yaşam döngüsünü (IClassicDesktopStyleApplicationLifetime) gerektirir. Tarayıcı ve mobil yaşam döngülerinde AllowFloating False kalır ve paneller yerleşik kalır.

Düzeni nasıl kaydeder ve geri yüklerim?

SaveLayout yerleşimi JSON metni olarak döndürür, SaveLayoutToFile ve SaveLayoutToStream onu yazar. LoadLayout, LoadLayoutFromFile ve LoadLayoutFromStream onu geri okur. Yüzen pencereler pencereyle birlikte göründüğü için LoadLayout yöntemini pencere açıldıktan sonra çağırın. Kayıtlı bir düzen henüz var olmayan bir paneli adlandırdığında OnRestorePanel denetimini oluşturmanıza ya da reddetmenize izin verir.

Dock yöneticisi hangi sürümde bulunur?

Dock yöneticisi, .NET için sgcNavigation Registered sürümünün parçasıdır, tekil paket olarak satılır ve sgcUI .NET Standard, Professional ve Enterprise sürümlerine dahildir. sgcNavigation'ın ücretsiz Community paketinde bulunmaz.

Düzen WinForms, WPF ve Delphi sürümleriyle uyumlu mu?

TsgcAvaloniaDockManager, TsgcWinFormsDockManager, TsgcWpfDockManager, TsgcVCLDockManager ve TsgcFMXDockManager hepsi aynı TsgcDockManagerModel üzerinde çalışır ve .NET modeli Delphi modeliyle aynı JSON metnini yazar.

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

Avalonia Uygulamanıza Docking Ekleyin

Avalonia için Registered sgcNavigation paketini ekleyin, pencerenize bir TsgcAvaloniaDockManager yerleştirin ve DockingShellAvalonia demosunu uygulamanızın yanında açın.