GitHub - AvaloniaUI/Avalonia.Samples: Avalonia.Samples aims to provide some minimal samples focusing on a particular issue at a time. This should help getting new users started. (original) (raw)

Welcome to Avalonia.Samples. This is a collection of minimal samples, which should make it easy for everyone to get started with Avalonia. Each sample is focusing on only one aspect of Avalonia.

πŸ—― Get in touch with us

If you have feedback, questions or suggestions, feel free to contact us via:

chat https%3A%2F%2Fimg.shields.io%2Fbadge%2Fgithub discussions blue%3Flogo%3Dgithub?style=flat&label=github&color=darkgreen&link=https%3A%2F%2Fgithub.com%2FAvaloniaUI%2FAvalonia

Or file a new bug-report or feature request in the Issues-section.

πŸ“‚ Organization of the Samples

Every sample can be found in its own subfolder and can run without any reference to another sample. Nevertheless, we have a *.slnx-file which has all projects in one solution, if you are looking for a complete collection of samples.

ℹ️ We migrated to the newer *.slnx-File format, which should be supported from all major IDEs. If it doesn’t work for you, please use the project-files inside the subdirectories.

You can find the list of samples below. The samples are structured in different categories and difficulties. For better search results, each sample is also tagged with some buzz-words.

In every sample folder you will find a README-file, which describes the sample in detail and, if applicable, has links to further information and documentation.

🐣 Difficulties

Each sample is tagged with its difficulty. The degree of difficulty describes how much base-knowledge a user should have.

πŸ”˜ Difficulty Degree of knowledge
🐣 Beginner A Beginner must not have any knowledge of Avalonia. Nevertheless, some basic knowledge of C#, X(A)ML and your IDE is mandatory.
πŸ₯ Easy Some very basic knowledge of Avalonia is needed.
πŸ” Normal The user is somewhat experienced with Avalonia.
πŸ‰ Hard These samples are focusing on non-standard tasks, which most users will not need to know.

✍️ Samples

πŸ’‘ MVVM-Samples

Sample Difficulty Buzz-Words
Basic MVVM Sample 🐣 Beginner MVVM, Model-View-ViewModel, ReactiveUI, INotifyPropertyChanged, XAML, Binding
Commands Sample 🐣 Beginner Command, ICommand, CommandParameter, MVVM, ReactiveCommand, async-await
ValueConverter Sample πŸ₯ Easy Converter, Binding, MultiBinding, IValueConverter, IMultiValueConverter, MVVM, FuncValueConverter
Validation Sample πŸ₯ Easy MVVM, Data-Validation, Exception, Error, Error-Message, Binding

DesktopIntegration-Samples

Sample Difficulty Buzz-Words
Tray Icon Sample 🐣 Beginner TrayIcon, ReactiveUI, Binding

🎞️ DataTemplate-Samples

Sample Difficulty Buzz-Words
Basic DataTemplate Sample πŸ” Normal DataTemplate, ToString, StringFormat, MVVM, ItemTemplate, ContentTemplate
FuncDataTemplate Sample πŸ” Normal FuncDataTemplate, DataTemplate, C#, Binding from code
Implementing IDataTemplate Sample πŸ” Normal IDataTemplate, DataTemplate, DataTemplateSelector

πŸ—ΊοΈ Routing / Navigation-Samples

Sample Difficulty Buzz-Words
Basic ViewLocator Sample πŸ” Normal ViewLocator, Routing, Wizard, Navigation, Page, MVVM

πŸ› οΈ Custom Controls Samples

Sample Difficulty Buzz-Words
RatingControl Sample πŸ” Normal Control, TemplatedControl, custom Control, reusable Control, AvaloniaProperty, StyledProperty, DirectProperty, ReadonlyProperty, Style, ControlTheme
SnowflakesControl Sample πŸ” Normal Custom Control, Render, Hit-Testing, Custom Animations

⚑ View Interaction Samples

Sample Difficulty Buzz-Words
Mvvm Dialog Sample πŸ” Normal MVVM, Dialog, FileDialogs, TopLevel, Clipboard
Dialog Manager Sample πŸ” Normal MVVM, Dialog, FileDialogs, TopLevel, Clipboard, DialogManager, CommunityToolkit.Mvvm

πŸ§ͺ️ Automated UI Testing

Sample Difficulty Buzz-Words
Testing with Headless XUnit πŸ” Normal XUnit, Headless, Automation, UI Testing
Testing with Headless NUnit πŸ” Normal NUnit, Headless, Automation, UI Testing
Testing with Appium πŸ‰ Hard XUnit, Appium, WinAppDriver, Automation, UI Testing

πŸ§‘β€πŸ’» Complete Apps

Sample Difficulty Buzz-Words
Simple ToDo-List πŸ₯ Easy ToDo-List, Complete App, MVVM, CommunityToolkit.MVVM, Source Generator, Styles, Commands
Music Store App πŸ₯ Easy Music Store, Complete App, CommunityToolkit.MVVM, Mvvm.Messaging, Styles, ObservableProperty, Commands, iTunes Api
Music Store App (F#) πŸ₯ Easy F#, Music Store, Complete App, CommunityToolkit.MVVM, Mvvm.Messaging, Styles, ObservableProperty, iTunes Api, Functional Programming
Advanced ToDo-List πŸ‰ Hard Todo-List, Cross-Platform, WebAssembly (WASM), SQLite, Service Pattern, Dependency Injection, MVVM Pattern, IndexedDB, Unit Testing, Headless Testing, Persistent Storage, Controls-Library

πŸͺ› Contribution

Is anything missing? Have you found an error? Have you found an outdated sample? Or do you have a great idea?

Fantastic! Your contribution is welcome.

ℹ️ Before you start, make sure you have read the Code of Conduct.

Code of Conduct

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. For more information see the Contributor Covenant Code of Conduct.

Issues and Feature Requests

If you file a new issue or feature request, please fill in the templates available. If you found an issue in an existing sample, please link the sample and, if possible, point us to what is wrong.

Pull Requests

ℹ️ Pull requests may be discussed and probably not every pull request will be merged in the end. If you are not sure, please πŸ—― Get in touch with us first. Anyway, every contribution is welcome.

Fixing an existing sample

If you find that in an existing sample something is unclear or missing, you can update the sample and file a pull request. Spelling mistakes or wrong wording can also be changed in a pull request.

❗ If you change the difficulty or the buzz-words, remember to also update the main page.

Adding a new sample

  1. Add a new Project to the Solution: src β–Ί Avalonia.Samples β–Ί Avalonia.Samples.sln
  2. In the root directory of the new sample add a README-file. We highly suggest using a template which you can find here:
    1. AsciiDoc-Template: If you want to provide richer content, we suggest using the ascii-doc-template.
    2. Markdown-Template: If you prefer not to use AsciiDoc, you can instead use the Markdown-template.