ToB企服应用市场:ToB评测及商务社交产业平台

标题: Avalonia创建自定义控件 [打印本页]

作者: 拉不拉稀肚拉稀    时间: 2024-3-31 00:39
标题: Avalonia创建自定义控件
Avalonia中有三个主要的控件类型:用户控件(User Control)、模板化控件(Templated Control)、基本控件(Basic Control)。创建自定义控件时选择适合的控件类型进行创建,三种控件类型适用场景如下(参考文档):
本文记录如何创建一个通用的模板化控件。
添加依赖属性

添加新建项,选择Avalonia TemplatedControl,添加后会生成一个axaml文件和一个cs文件。如实现一个ImageButton,继承自Button,添加一个IImage依赖属性:
  1. public class ImageButton : Button
  2. {
  3.     public static readonly StyledProperty<IImage?> SourceProperty =
  4.         AvaloniaProperty.Register<ImageButton, IImage?>(nameof(Source));
  5.     public IImage? Source
  6.     {
  7.         get => GetValue(SourceProperty);
  8.         set => SetValue(SourceProperty, value);
  9.     }
  10. }
复制代码
设计外观

修改axaml文件,为ImageButton设计外观。ControlTemplate中包含了一个Image控件,其Source属性绑定到添加的Source依赖属性,以显示图片。设置Transitions属性,监听Image的RenderTransform属性,当其变化时使用过度动画处理。添加伪类,处理鼠标悬停时的效果(图片透明度变化)和按下时的效果(图片缩放)。
  1.           
  2.           </Style>
  3.           
  4.           </Style>
  5.   </Style>
  6. </Styles>
复制代码
添加样式到应用程序中

在App.axaml中,添加ImageButton的样式文件:
  1. <Application.Styles>
  2.     <FluentTheme />
  3.         <StyleInclude Source="avares://AvaloniaAppTest/Controls/ImageButton.axaml"/>
  4. </Application.Styles>
复制代码
如果创建了许多样式文件,可以添加一个Styles(Avalonia)文件,这是一个axaml文件。将所有的样式文件使用StyleInclude添加到该文件中,然后将该文件添加到App.axaml中:
  1.     <Application.Styles>
  2.     <FluentTheme />
  3.         <StyleInclude Source="avares://AvaloniaAppTest/Controls/ImageButton.axaml"/>
  4. </Application.Styles>        <Application.Styles>
  5.     <FluentTheme />
  6.         <StyleInclude Source="avares://AvaloniaAppTest/Controls/ImageButton.axaml"/>
  7. </Application.Styles>
复制代码
使用控件

在主窗口中使用控件:
  1. <Window xmlns="https://github.com/avaloniaui"
  2.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3.         xmlns:vm="using:AvaloniaAppTest.ViewModels"
  4.                 xmlns:cc="using:AvaloniaAppTest"
  5.         x:
  6.         x:DataType="vm:MainWindowViewModel"
  7.         Icon="/Assets/avalonia-logo.ico"
  8.         Title="AvaloniaAppTest">
  9.         <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
  10.                 <cc:ImageButton Source="avares://AvaloniaAppTest/Assets/csharp.png" Width="64"/>
  11.         </StackPanel>
  12. </Window>
复制代码
运行程序,效果如下图所示:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4