Docking w Avalonia z natywnym menedżerem dokowania

TsgcAvaloniaDockManager zamienia okno Avalonia 12 w obszar roboczy w stylu IDE. Panele narzędzi dokują się po czterech stronach, środek jest obszarem dokumentów z kartami, a użytkownik przeciąga tytuły i karty na prowadnice upuszczania, automatycznie ukrywa panele na krawędziach lub pozwala im pływać we własnych oknach. Każdy panel hostuje jedną z Twoich własnych kontrolek Avalonia, a całe rozmieszczenie jest zapisywane jako JSON. Menedżer dokowania jest częścią sgcNavigation, nowości w sgcUI 2026.11.

Obszar roboczy z dokowaniem w Twojej aplikacji Avalonia

Jedna kontrolka umieszczona w oknie. Dodajesz panele w kodzie, dajesz każdemu własną kontrolkę, a użytkownik je rozmieszcza.

Witryna dokowania z kartami Explorer i Search po lewej, automatycznie ukrytym paskiem Toolbox, czterema kartami dokumentów, panelem Properties po prawej i Output na dole, z prowadnicami upuszczania i prostokątem podglądu na prawej połowie dokumentów podczas przeciągania Output
Menedżer dokowania sgcNavigation podczas przeciągania panelu Output: kompas, prowadnice krawędzi i prostokąt podglądu.

Panele narzędzi i dokumenty

Każdy TsgcDockPanel ma Name, Caption, ikonę, Kind (dpkTool lub dpkDocument) oraz Control, który wyświetla. Panele narzędzi startują po stronie swojego Placement, o szerokości DockSize, a panele z tym samym GroupName łączą się w karty.

Twoje własne kontrolki

Zawartością panelu jest zwykły Control z Avalonia. Staje się logicznym i wizualnym potomkiem witryny dokowania, więc DataContext płynie z Twojego okna, a kontrolka jest rozmieszczana i wyświetlana, dopóki jej panel jest aktywny. Ukryty panel zachowuje swoją kontrolkę jako ukrytego potomka.

Prowadnice upuszczania z podglądem

Podczas przeciągania tytułu lub karty kompas na grupie pod wskaźnikiem dzieli tę grupę z jednej strony albo dodaje panel do niej jako kartę, prowadnice krawędzi dokują go na krawędzi całej witryny, a prostokąt podglądu w kolorze akcentu pokazuje, ile miejsca zajmie. Esc anuluje przeciąganie.

Rozdzielacze

Grupy znajdują się w zagnieżdżonych podziałach, obok siebie lub jedna nad drugą, z rozdzielaczami między nimi. Przeciągnięcie zmienia rozmiar sąsiadów na żywo, a każda grupa zachowuje co najmniej MinPanelSize. SplitterSize ustawia szerokość rozdzielaczy.

Wysuwane panele z automatycznym ukrywaniem

Przycisk przypinania wysyła panel narzędzi na pasek jego strony. Najechanie na jego kartę na AutoHideDelay milisekund lub kliknięcie jej wysuwa panel jako wysuwany panel nad zawartością, a gdy użytkownik pracuje gdzie indziej, panel się chowa. W kodzie to samo robi Model.SetAutoHide.

Okna pływające

Upuść panel z dala od prowadnic, kliknij dwukrotnie jego tytuł lub wybierz Float w jego menu, a przejdzie do bezramkowego okna Avalonia należącego do Twojego okna, poza paskiem zadań. Okno pływające ma własne drzewo, więc można w nim dokować kolejne panele. Każde okno pływające używa skali własnego monitora.

Grupy dokumentów

Obszar dokumentów ma paski kart z kartami przypiętymi i zmodyfikowanymi, przyciskami zamykania, przyciskiem nowej karty (DocumentShowNewButton, OnNewDocument) i przyciskiem listy kart. Przeciągnięcie karty dokumentu na bok dzieli ją do nowej grupy dokumentów, a dwukrotne kliknięcie karty maksymalizuje jej grupę.

Klawisze dokowania i menu paneli

Ctrl+F6 przełącza dokumenty, Alt+F7 panele narzędzi, Shift+Esc ukrywa aktywny panel narzędzi, a Alt+Minus otwiera menu panelu z Float, Dock, Auto Hide, Hide i Close. Ctrl+Tab, Ctrl+W i Ctrl+F4 są również obsługiwane jako klawisze dokowania. Z TsgcAvaloniaCommandPalette menedżer dokowania wyświetla też po jednym poleceniu Window na panel.

Dostępność, RTL i HiDPI

Czytniki ekranu widzą witrynę przez UI Automation jako okienko o nazwie "Dock site", z okienkami dla grup, elementami kart dla pasków i separatorami z wartością zakresu dla rozdzielaczy. Przy FlowDirection od prawej do lewej cała witryna jest odbijana lustrzanie. Oprawa jest rysowana w skali renderowania okna.

Układ jako JSON

SaveLayout, SaveLayoutToFile i SaveLayoutToStream zapisują rozmieszczenie, metody LoadLayout wczytują je z powrotem i ograniczają okna pływające do obszaru roboczego ekranów. Tekst JSON jest identyczny z tekstem modelu Delphi. OnRestorePanel tworzy kontrolkę panelu, który wymienia zapisany układ, a którego Twoja sesja jeszcze nie otworzyła.

Motywy, w tym Fluent

Theme przełącza menedżera dokowania między motywami jasnym, ciemnym, wysokiego kontrastu i niestandardowymi, a AccentColor ustawia akcent aktywnego tytułu. Ustaw sgcUIApplication.ThemePreset na ustawienie Fluent, a menedżer dokowania będzie rysował kolorami WinUI 3, jak każda inna kontrolka sgcUI.

Zlokalizowane teksty

Napisy oprawy dokowania (Close, Auto Hide, Maximize, Float, Dock, Hide, "No open documents" oraz nazwy, które słyszą czytniki ekranu) przechodzą przez sgcUILang, a pakiety tłumaczeń sgcUI obejmują hiszpański, niemiecki, francuski, włoski, niderlandzki, polski, portugalski, turecki, japoński, koreański i chiński.

Docking w oknie Avalonia 12

To kompletne okno małej aplikacji Avalonia 12 na net8.0 z FluentTheme. Zostało skompilowane z bieżącymi źródłami sgcNavigation, kodem sgcUI 2026.11, z 0 błędów i 0 ostrzeżeń.

XAML

Zestawy Avalonia sgcUI mapują swoje kontrolki na jeden URI przestrzeni nazw, więc prefiks sgc znajduje TsgcAvaloniaDockManager. Menedżer dokowania wypełnia okno:

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>

Panele, automatyczne ukrywanie i zapisany układ

Trzy panele narzędzi i dwa dokumenty są dodawane między BeginUpdate a EndUpdate, więc są rozmieszczane tylko raz. Panel Output startuje automatycznie ukryty, przycisk + otwiera nowy dokument, a układ jest zapisywany przy zamykaniu okna i wczytywany przy ponownym otwarciu:

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

Wygląd Fluent

Jedna linia w App.Initialize przełącza każdą kontrolkę sgcUI aplikacji, w tym menedżera dokowania, na ustawienie Fluent:

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

W kodzie DockPanel, FloatPanel, ClosePanel, ShowPanel i ActivatePanel robią to, co użytkownik robi myszą. OnPanelDock wyzwala się pierwszy i może odrzucić dokowanie, przejście w tryb pływający lub zmianę automatycznego ukrywania, a OnPanelClose może zostawić panel otwarty. Jak inne zdarzenia sgcNavigation, są to właściwości delegatów przypisywane w kodzie.

Jeden model dokowania, pięć frameworków UI

Menedżer dokowania Avalonia jest jednym widokiem modelu, którego sgcNavigation używa także w WinForms, WPF i Delphi.

Framework Kontrolka Uwagi
Avalonia 12TsgcAvaloniaDockManagerNuGet esegece.sgcNavigation.Avalonia dla net8.0, net9.0 i net10.0, w systemach Windows, Linux i macOS. Okna pływające wymagają klasycznego cyklu życia pulpitu.
WPFTsgcWpfDockManagerTen sam model, te same panele, te same zdarzenia.
WinFormsTsgcWinFormsDockManagerTen sam model, te same panele, te same zdarzenia.
Delphi VCLTsgcVCLDockManagerModel Delphi zapisuje ten sam tekst JSON układu.
Delphi FireMonkeyTsgcFMXDockManagerModel Delphi zapisuje ten sam tekst JSON układu.

Wszystkie pięć działa na TsgcDockManagerModel, więc zespół dostarczający aplikację desktopową Delphi i aplikację Avalonia zachowuje jeden projekt dokowania i jeden format układu. WinForms, WPF i Avalonia wchodzą w skład każdej edycji sgcUI .NET.

Gdzie jest dołączony menedżer dokowania

Edycja Registered

Menedżer dokowania, jego okna pływające, obszar dokumentów i zapisywanie układu są częścią edycji Registered sgcNavigation dla .NET. Kup sgcNavigation .NET jako pojedynczy pakiet albo uzyskaj go w edycjach Standard, Professional i Enterprise sgcUI .NET, każda licencjonowana na programistę.

Pakiet Community

Bezpłatny pakiet Community sgcNavigation zawiera resztę sgcNavigation, taką jak pasek nawigacji i jego drzewo z wyszukiwaniem, ale nie menedżera dokowania ani palety poleceń. Do dokowania używaj pakietów Registered.

sgcNavigation czy biblioteka Dock?

Jeśli szukasz dokowania dla Avalonia, znajdziesz też Dock, otwartoźródłowy projekt dokowania dla Avalonia. Ta strona nie porównuje z nim funkcji, więc oceń oba rozwiązania według własnych wymagań.

DockingShellAvalonia

Powłoka z dokowaniem dla Avalonia w systemach Windows, Linux i macOS: drzewo Explorer po lewej, Properties po prawej, Output automatycznie ukryty na dole oraz dokumenty tekstowe z kartami przypiętymi i zmodyfikowanymi.

Co pokazuje

Przeciągnij tytuł lub kartę na prowadnice, upuść ją z dala od nich, aby pływała, albo przypnij panel narzędzi, aby ukrywał się automatycznie. Paleta poleceń (Ctrl+Shift+P) wyświetla po jednym poleceniu Window na panel, a pole wyboru przełącza ciemny motyw.

Zapisywanie układu

Układ jest zapisywany w DockingShell.layout.json przy zamykaniu okna i wczytywany przy następnym uruchomieniu, a Reset layout wraca do układu początkowego. Zapisany dokument dostaje nowe pole tekstowe przez OnRestorePanel.

Gdzie jest

W demach sgcUI .NET, w folderze Navigation\DockingShellAvalonia, obok dem WinForms DockingShell i DockingShellWpf. dotnet run -- --test result.txt uruchamia jego autotest.

Zobacz dema sgcUI lub przeczytaj temat pomocy o dokowaniu.

Pytania o docking w Avalonia

Czy mogę umieszczać własne kontrolki Avalonia w panelach dokowania?

Tak. Control każdego TsgcDockPanel jest zwykłym Control z Avalonia, TreeView, TextBox, UserControl lub dowolnym własnym widokiem. Staje się potomkiem witryny dokowania, więc jego DataContext płynie z okna, a menedżer dokowania rozmieszcza go i wyświetla, dopóki jego panel jest aktywny. Menedżer dokowania nigdy go nie zwalnia.

Czy okna pływające działają w systemach Linux i macOS?

Okna pływające są oknami Avalonia, więc wymagają klasycznego cyklu życia pulpitu (IClassicDesktopStyleApplicationLifetime), którego używa aplikacja desktopowa Avalonia w systemach Windows, Linux i macOS. W cyklach życia przeglądarki i urządzeń mobilnych AllowFloating pozostaje False, a panele pozostają zadokowane.

Jak zapisać i przywrócić układ?

SaveLayout zwraca rozmieszczenie jako tekst JSON, a SaveLayoutToFile i SaveLayoutToStream je zapisują. LoadLayout, LoadLayoutFromFile i LoadLayoutFromStream wczytują je z powrotem. Wywołaj LoadLayout po otwarciu okna, ponieważ okna pływające są pokazywane razem z oknem. Gdy zapisany układ wymienia panel, który jeszcze nie istnieje, OnRestorePanel pozwala utworzyć jego kontrolkę lub go odrzucić.

Która edycja zawiera menedżera dokowania?

Menedżer dokowania jest częścią edycji Registered sgcNavigation dla .NET, sprzedawanej jako pojedynczy pakiet i wchodzącej w skład edycji Standard, Professional i Enterprise sgcUI .NET. Bezpłatny pakiet Community sgcNavigation go nie zawiera.

Czy układ jest zgodny z wersjami dla WinForms, WPF i Delphi?

TsgcAvaloniaDockManager, TsgcWinFormsDockManager, TsgcWpfDockManager, TsgcVCLDockManager i TsgcFMXDockManager działają na tym samym TsgcDockManagerModel, a model .NET zapisuje tekst JSON identyczny z tekstem modelu Delphi.

Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Dodaj docking do swojej aplikacji Avalonia

Dodaj pakiet Registered sgcNavigation dla Avalonia, umieść TsgcAvaloniaDockManager w swoim oknie i otwórz demo DockingShellAvalonia obok swojej aplikacji.