如何使用 Acss.Behaviors
作为示例,我们在当前版本提供了两个内置行为。具体使用方式请参考行为。
**combobox.popup.align。**这个行为可以将下拉框的下拉列表的选中项对齐到下拉框。
**window.esc.close。**这个行为可以让窗口支持相应
Esc
键来关闭窗口。
更多的内置行为正在计划当中。如果对此你有任何需求,欢迎在这里告诉我们。
安装依赖库
dotnet add package Nlnet.Avalonia.Css.Behaviors --version 1.0.0-beta.4
自定义行为
引用包 Nlnet.Avalonia.Css.CompileGenerator。
dotnet add package Nlnet.Avalonia.Css.CompileGenerator --version 1.0.0-beta.4
创建行为声明类,继承 AvaloniaObject 类和 IBehaviorDeclarer 接口。
public partial class CustomA : AvaloniaObject, IBehaviorDeclarer
{
}
提供使用行为声明类 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;
}
创建自定义行为类,该行为类挂在在行为声明类 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();
}
}
}
在程序中使用 CustomA 行为声明类。
private static AppBuilder BuildAvaloniaApp()
{
return AppBuilder.Configure<App>()
.UsePlatformDetect()
// Use avalonia css stuff.
.UseAcssDefaultBuilder()
// [Optional] Use acss behavior.
.UseAcssBehaviorForDefaultBuilder();
// [Optional] Use customA behavior.
.UseCustomABehaviorForDefaultBulder();
}
在 Acss 代码中使用行为类。
ComboBoxPage ComboBox#C1{
.acss:combobox.popup.align;
}
NtWindow#RootWindow{
.acss:window.esc.close;
}
最后更新于
这有帮助吗?