Как изменить отрисовку виджетов в WinUi 3?

Я изучаю возможности графической библиотеки WinUi 3. И меня в частности интересует возможность изменять отображение виджетов (контролов, вьюх иными словами). Но бегло просмотрев документацию я удивился что не смог быстро найти поддержку кастомной отрисовки виждетов. Даже смотрел дизассемблированные библиотеки (реализацию Control, FrameworkElement, Button и тд) - методов отрисовки нигде не увидел. Модель рендеринга не понятна, как библиотека отрисовывает контролы и как мне можно было переопределить отрисовку самому?


Ответы (1 шт):

Автор решения: demonplus

В плане кастомной отрисовки виджетов WinUI3 радикально отличается от WPF, методов типа OnRender, которые позволяли менять отрисовку в WinUI3 нет и вряд ли в версии 1.0 они появятся.

В принципе, сейчас единственный путь - использовать DirectWrite и его реализацию под WinUI3 DWriteCore

https://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/dwritecore

Но это сильно низкоуровневый путь, не очень удобный.

P.S. небольшое дополнение от разработчиков WinUi (https://github.com/microsoft/microsoft-ui-xaml/issues/6050)

WinUI has largely focused on the user interface of an application rather than being a renderer for application content, and complex custom rendering is less common for the user interface. More capabilities have been added in recent years, but even those focus on shapes and paths. Note that there are both XAML elements for Shape and Path as well as Composition primitives via CompositionSpriteShape, which moves the shape handling/rendering down to the composition layer. If the rendering capabilities you're looking for here are shapes/paths, then perhaps Win2D is a better fit?

→ Ссылка