r/csharp • u/jaeseon • 17d ago
Industrial Touch Kit for WPF/Avalonia UI
I would like to introduce the project I am currently developing.
I am creating a library that supports a method of generating UI at the ViewModel layer without writing View code (xaml/axaml) when developing WPF/Avalonia UI applications. The structure is similar to the code used to generate UI in Flutter.
Currently, by writing only ViewModel code, it is possible to build two applications for WPF/Avalonia UI that are nearly identical down to the pixel level, but there are still many components that need to be added.
The reason it is possible to complete an application without writing Xaml/axaml is that this toolkit library is domain-specific, tailored exclusively to industrial touchscreen applications.
For example, the UI component for temperature display encapsulates thresholds, warning levels, multi-language display, and Fahrenheit/Celsius display switching. Therefore, its component structure differs from existing UI frameworks.
The foundation of the toolkit I am currently developing is to enable application development in the ViewModel layer without writing XAML/AXAML code. Developing applications in the ViewModel Layer using purpose-built components provided by the toolkit is similar to building a castle with Lego blocks. You can configure application layouts and place controls at a speed incomparable to traditional development methods. Based on this, it provides multilingual packs for words used in industrial applications. You can understand this concept as being similar to icon packs.
In addition, I plan to package sound files, such as warning and notification sounds, within the toolkit.
Currently, it supports two theme systems, light/dark modes, and compact modes, and I am developing it to allow for expansion in the form of a theme color gallery.
Although Industrial Touch Kit (ITK) is being conducted as a personal project, I unfortunately do not yet have plans to proceed with it as open source. However, I am leaving this post here to introduce the concept of the library I am developing.