Skip to content

Avalonia.Samples aims to provide some minimal samples focusing on a particular issue at a time. This should help getting new users started.

Notifications You must be signed in to change notification settings

AvaloniaUI/Avalonia.Samples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Avalonia Logo Samples

πŸ—― Get in touch with us

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

chat Join%20Chat discord join%20chat 46BC99

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 sub-folder and can run without any reference to another sample. Nevertheless we have a *.sln-File which has all projects in one solution, if you are looking for a complete collection of samples.

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 it’s 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

βœ’οΈ Drawing-Samples

Sample Difficulty Buzz-Words

BattleCity Game Sample

πŸ” Normal

Game, Canvas, Game Loop, MVVM

Rect Painter Sample

πŸ” Normal

Graphics, MVVM

🎞️ 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

⚑ 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

πŸͺ› 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 the 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, that something is unclear or missing, you can update this sample and file a pull request. Also spelling mistakes or wrong wording can be changed and a pull request can be send.

❗
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 to use the template which you can find here:

    1. AsciiDoc-Template: If you want to provide richer content, we suggest to use the ascii-doc-template.

    2. Markdown-Template: If you don’t like option a), you can use also the Markdown-template.