Avalonia Css
Source CodeδΈ­ζ–‡
  • Documentation
    • πŸŽ†Welcome
    • πŸŒοΈβ€β™‚οΈGet started
      • About Acss
      • Processes and concepts
      • Security
      • Performance Evaluation
      • Configuring the development environment
      • Debugging
      • About source code
      • FAQ
    • ❓How-to
      • Using Acss
        • Type Resolution
        • Configuration
        • Code Source
        • Extending Resources
      • Using Acss.Controls
      • Using Acss.Fluent
      • Using MessageBox
      • Using Senior
      • Using Acss.Behaviors
    • πŸ“Acss Syntax
      • Comment
      • Resource
      • Style
      • Animation
      • Behavior
    • πŸ’ŽBest Practices
      • Define a good control template
Powered by GitBook
On this page
  • Installation
  • Custom behaviours

Was this helpful?

Edit on GitHub
  1. Documentation
  2. How-to

Using Acss.Behaviors

PreviousUsing SeniorNextAcss Syntax

Last updated 1 year ago

Was this helpful?

As examples, we provide two built-in behaviours in the current version. Please refer to the for details on how to use them.

  • combobox.popup.align. This behaviour aligns the selected items of a drop-down list to a drop-down box.

  • window.esc.close. This behaviour allows the window to support the corresponding Esc key to close the window.

More inbuilt behaviours are being planned. If you have any requests for this, feel free to let us know .

Installation

dotnet add package Nlnet.Avalonia.Css.Behaviors --version 1.0.0-beta.4

Custom behaviours

  • Import Nlnet.Avalonia.Css.CompileGenerator.

dotnet add package Nlnet.Avalonia.Css.CompileGenerator --version 1.0.0-beta.4
  • Creates a behaviour declaration class, inheriting the AvaloniaObject class and the IBehaviorDeclarer interface.

public partial class CustomA : AvaloniaObject, IBehaviorDeclarer
{
        
}
  • Provides extension classes that use the behaviour declaration class CustomA.

/// <summary>
/// Use customA behavior feature for default css context.
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static AppBuilder UseCustomABehaviorForDefaultContext(this AppBuilder builder)
{
    AcssBuilder.Default.BehaviorResolverManager.LoadResolver(new GenericBehaviorResolver<CustomA>());
    AcssBuilder.Default.BehaviorDeclarerManager.RegisterDeclarer<CustomA>(nameof(CustomA).ToLower());
    AcssBuilder.Default.BehaviorDeclarerManager.RegisterDeclarer<CustomA>(nameof(CustomA));
    return builder;
}
  • Create a custom behaviour class that hangs under the behaviour declaration class CustomA.

[Behavior("window.esc.close", typeof(CustomA))]
public class WindowEscCloseBehavior: AcssBehavior<WindowEscCloseBehavior>
{
    protected override void OnAttached(AvaloniaObject target)
    {
        if (target is not Window window)
        {
            return;
        }

        window.KeyDown -= WindowOnKeyDown;
        window.KeyDown += WindowOnKeyDown;
    }
    
    protected override void OnDetached(AvaloniaObject target)
    {
        if (target is not Window window)
        {
            return;
        }

        window.KeyDown -= WindowOnKeyDown;
    }
    
    private static void WindowOnKeyDown(object? sender, KeyEventArgs e)
    {
        if (sender is not Window window)
        {
            return;
        }
        if (e.Key == Key.Escape)
        {
            window.Close();
        }
    }
}
  • Use the CustomA behaviour to declare classes in your program.

private static AppBuilder BuildAvaloniaApp()
{
    return AppBuilder.Configure<App>()
        .UsePlatformDetect()

        // Use avalonia css stuff.
        .UseAcssDefaultBuilder()

        // [Optional] Use acss behavior.
        .UseAcssBehaviorForDefaultBuilder();
    	
    	// [Optional] Use customA behavior.
    	.UseCustomABehaviorForDefaultBulder();
}
  • Using behavioural classes in Acss code.

ComboBoxPage ComboBox#C1{
    .acss:combobox.popup.align;
}

NtWindow#RootWindow{
    .acss:window.esc.close;
}
❓
behavior
here