¿Dónde cargar estilos de control de contenido en la biblioteca de clases de Avalonia?

Tengo un ContentControl/TemplatedControl escrito en Avalonia Class Library y los estilos definidos en un archivo.

Para cargar los estilos, en WPF, debe agregar AssemblyInfo.cs con este truco

using System.Windows;

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
                                     //(used if a resource is not found in the page,
                                     // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
                                              //(used if a resource is not found in the page,
                                              // app, or any theme specific resource dictionaries)
)]

Ahora con Avalonia... ¿cuál es la forma de hacerlo?

EDITAR: ¿La respuesta es que el cliente debe registrar los archivos manualmente en App.xaml?

<Application.Styles>
    <StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
    <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/>
    <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml"/>
</Application.Styles>

pero entonces, ¿qué pasa si quiero mostrar múltiples controles de este tipo con diferentes estilos? Podría tener una propiedad en el control para elegir el tema o los colores.

Answer

Los estilos definidos en App.xamlson globales, por lo que todos los controles los usarán. Sin embargo, es posible cambiarlos en tiempo de ejecución. En su caso, podría comenzar con la creación de un diccionario de estilos para simplificar las cosas y agregar todos los que están StyleIncludeallí, de modo Application.Stylesque solo tenga una entrada:

<Application.Styles>
    <StyleInclude Source="avares://YourAssembly/Path/YourStyles1.xaml"/>
</Application.Styles>

Ahora, supongamos que desea cambiar este recurso YourStyles2.xamlen el código.

private static StyleInclude CreateStyle(string url)
{
    var self = new Uri("resm:Styles?assembly=YourAssembly");
    return new StyleInclude(self)
    {
        Source = new Uri(url)
    };
}

private void SetStyles()
{
   var newStyles = CreateStyle("avares://YourAssembly/Path/YourStyles2.xaml");
   Avalonia.Application.Current.Styles[0] = newStyles;
}