A docking layout system.
Dock is a docking layout system for Avalonia applications. Use of Dock is governed by the MIT License.
Key Features:
- ItemsSource Support: Bind document collections directly to DocumentDock for automatic document management
- Flexible Content Templates: Use DocumentTemplate for customizable document content rendering
- Multiple MVVM Frameworks: Support for ReactiveUI, Prism, ReactiveProperty, and standard MVVM patterns
- Comprehensive Serialization: Save and restore layouts with multiple format options (JSON, XML, YAML, Protobuf)
- Rich Theming: Fluent and Simple themes with full customization support
- Floating Windows: Detach documents and tools into separate windows
- Dependency Injection: First-class support for .NET DI containers
First, clone the repository or download the latest zip.
git clone https://github.com/wieslawsoltes/Dock.git
Open up a terminal prompt and execute the commands.
Target frameworks: netstandard2.0
, net6.0
, net8.0
for libraries, net9.0
for samples:
dotnet build src/Dock.Avalonia/Dock.Avalonia.csproj -c Release -f netstandard2.0
Alternatively execute the repository build script which restores, builds and tests all projects. The scripts work on Windows and Unix like systems:
./build.sh # or .\build.cmd on Windows
Dock is delivered as a NuGet package.
You can find the packages here NuGet and install the package like this:
Install-Package Dock.Avalonia
Install-Package Dock.Model.Mvvm
Install-Package Dock.Serializer.Newtonsoft
Install-Package Dock.Avalonia.Themes.Fluent
Available NuGet packages:
Core packages:
Dock.Avalonia
- Main Avalonia controls and themesDock.Model
- Core model interfaces and base classes
Model packages:
Dock.Model.Mvvm
- MVVM implementation with base view modelsDock.Model.ReactiveUI
- ReactiveUI integrationDock.Model.ReactiveProperty
- ReactiveProperty integrationDock.Model.Prism
- Prism framework integrationDock.Model.Inpc
- INotifyPropertyChanged base implementationDock.Model.Avalonia
- Avalonia-specific model extensionsDock.Model.Extensions.DependencyInjection
- .NET DI container integration
Serialization packages:
Dock.Serializer.Newtonsoft
- JSON serialization using Newtonsoft.JsonDock.Serializer.SystemTextJson
- JSON serialization using System.Text.JsonDock.Serializer.Protobuf
- Binary serialization using protobuf-netDock.Serializer.Xml
- XML serializationDock.Serializer.Yaml
- YAML serialization
UI and control packages:
Dock.Avalonia.Themes.Fluent
- Fluent theme stylesDock.Avalonia.Themes.Simple
- Simple theme stylesDock.Avalonia.Diagnostics
- Debugging and diagnostic toolsDock.Controls.ProportionalStackPanel
- Resizable panel controlDock.Controls.Recycling
- Control recycling utilitiesDock.Controls.Recycling.Model
- Control recycling model interfacesDock.MarkupExtension
- XAML markup extensionsDock.Settings
- Global docking behavior settings
or by using nightly build feed:
- Add
https://www.myget.org/F/dock-nightly/api/v2
to your package sources - Alternative nightly build feed
https://pkgs.dev.azure.com/wieslawsoltes/GitHub/_packaging/Nightly/nuget/v3/index.json
- Update your package using
Dock
feed
and install the package like this:
Install-Package Dock.Avalonia -Pre
Install-Package Dock.Model.Mvvm -Pre
Install-Package Dock.Serializer.Newtonsoft -Pre
Install-Package Dock.Avalonia.Themes.Fluent -Pre
-
Sample applications can be found under the samples directory which illustrate each approach in a working project:
DockXamlSample
- XAML layouts with ItemsSource examplesDockMvvmSample
- Full MVVM implementationDockReactiveUISample
- ReactiveUI patternsDockCodeOnlySample
- Pure C# layoutsNotepad
- Real-world text editor exampleVisualStudioDemo
- Visual Studio-like interface- And many more specialized examples
Dock is licensed under the MIT license.