论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
Avalonia系列文章之再试牛刀
Avalonia系列文章之再试牛刀
吴旭华
金牌会员
|
2025-1-25 14:20:23
|
显示全部楼层
|
阅读模式
楼主
主题
888
|
帖子
888
|
积分
2664
通过前一篇文章,已经相识了AvaloniaUI的环境安装以及项目创建,磨刀不误砍柴工,今天继承进行Avalonia基础知识学习,如有不足之处,还请指正。
项目组成
在前一篇文章中,我们创建了第一个Avalonia项目“FirstAvalonia”,通过分析发现,默认创建的解决方案,有两部分组成:
FirstAvalonia.Desktop,此项目体现我们创建的项目是基于Windows桌面程序的,Program类中的Main方法为程序启动入口。
FirstAvalonia,此项目为多平台之间共享的主要项目,默认基于MVVM模式进行开发,主要程序结构如下:
Views,存放视图页面,为了与WPF创建的".xaml"进行区分,Avalonia UI 使用了自己的.axaml扩展名——'Avalonia XAML'。
ViewModels,存放视图模子,默认创建的ViewModel根据选择的“Design Pattern”不同,继承不同的基类,实现具备关照功能的属性。
Assets,主要存放一些静态资源,如图片等。
App.axaml,为应用程序的入口,可以定义主题样式等内容。
默认创建的项目示例,如下图所示:
视图文件
默认创建的MainWindow.axaml文件,是一个典型的Avalonia视图文件,主要包含Window标签以及一些属性和一个内容,它体现一个窗口,以及一些窗口设置,和它的内容(MainView是一个用户控件)。
根节点定义了视图页面的类型(如:Window,Page,UserControl等),它有三个重要属性:
xmlns="https://github.com/avaloniaui" ——这是 Avalonia UI 本身的XAML命名空间声明。这是必需的,否则文件将无法被辨认为Avalonia XAML文档;
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ——这是XAML语言命名空间的声明;
x: ——这是上面声明的扩展(用于'x')告诉XAML编译器在文件中找到相关联的类的位置。这个类在代码后台文件中定义,通常用C#编写。
详细如下所示:
<Window xmlns="https://github.com/avaloniaui"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:vm="using:FirstAvalonia.ViewModels"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:views="clr-namespace:FirstAvalonia.Views"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>x:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Icon="/Assets/avalonia-logo.ico"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Title="FirstAvalonia">
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window><views:MainView />
</Window>
复制代码
与XAML一样,在Avalonia XAML文件中,可以根据需要声明命名空间,并以此来找到XAML文件中使用的元素的定义。可以使用xmlns属性添加命名空间。命名空间声明的格式如下:
xmlns:alias="definition"
复制代码
通常在根元素中定义您要使用的所有命名空间是标准做法。此中alias是命名控件的别名,别名在文件内始终保持唯一。此中命名空间的引用,通常采用命名空间前缀,格式为“clr-namespace:命名空间”,当代码存在于与XAML相同的程序会适时,您可以使用此语法,如:xmlns:views="clr-namespace:FirstAvalonia.Views";如果代码在另一个被引用的程序会合(例如一个库中),您必须扩展阐明以包含被引用程序集的名称:xmlns:别名="clr-namespace:命名空间;assembly=程序集"。
code-behind文件
与WPF一样,Avalonia视图文件有一个关联的code-behind文件,并以“.axaml.cs”为文件后缀,主要用来处理变乱以及其他逻辑等。通常情况下,在Visual Studio 开发工具中, code-behind文件,显示在视图文件的下一级。
code-behind类包含一个与视图文件同名的类,并用“partial”关键字修饰,体现一个部分类,在编译时,视图页面和code-behind类,会编译成一个类。
using Avalonia.Controls;namespace FirstAvalonia.Views;public partial class MainWindow : Window{ public MainWindow() {<Window xmlns="https://github.com/avaloniaui"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:vm="using:FirstAvalonia.ViewModels"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:views="clr-namespace:FirstAvalonia.Views"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>x:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Icon="/Assets/avalonia-logo.ico"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Title="FirstAvalonia">
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window><views:MainView />
</Window>InitializeComponent(); }}
复制代码
code-behind类名与XAML文件的名称匹配,而且在Window元素的x:Class属性中也有引用。
<Window xmlns="https://github.com/avaloniaui"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:vm="using:FirstAvalonia.ViewModels"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:views="clr-namespace:FirstAvalonia.Views"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>x:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Icon="/Assets/avalonia-logo.ico"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Title="FirstAvalonia">
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window><views:MainView />
</Window>
复制代码
留意:如果在代码中对类名或其命名空间进行了任何更改,请确保x:Class属性始终匹配,否则会出现错误。
用户控件
默认创建的项目中,在MainWindow页面的Window根节点下,有一个内容节点MainView,此节点体现一个自定义的用户控件,用于显示内容,这样可以到达控件的有用复用。
首先引入MainView所在的命名空间,并将别名命名为views,因为MainWindow和MainView在同一个程序集内,所以直接通过xmlns:views="clr-namespace:FirstAvalonia.Views"引入即可,不需要添加程序集阐明。
其次引入命名空间后,即可访问MainView视图,格式为:。
MainView和MainWindow不但根节点不同,在code-behind类中,所继承的父类也不同,体现它们属于不同的控件形式。以MainView视图为例,MainView的根节点为UserControl,体现一个自定义的用户控件,由于Avalonia默认采用MVVM开发模式,与平凡控件有以下几点需要留意:
在此页面中,首先引入MainViewModel所在的命名空间,语句为:xmlns:vm="clr-namespace:FirstAvalonia.ViewModels"。
声明x
ataType类型为MainViewModel类型,语句为:x
ataType="vm:MainViewModel"。
将UI页面的DataContext设置为MainViewModel。
另外,我们还可以给UserControl添加UI元素,如TextBlock,Button等,如下所示:
<Window xmlns="https://github.com/avaloniaui"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:vm="using:FirstAvalonia.ViewModels"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>xmlns:views="clr-namespace:FirstAvalonia.Views"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>x:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Icon="/Assets/avalonia-logo.ico"
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window>Title="FirstAvalonia">
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FirstAvalonia.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:FirstAvalonia.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:
Icon="/Assets/avalonia-logo.ico"
Title="FirstAvalonia">
<views:MainView />
</Window><views:MainView />
</Window>
复制代码
在上述示例中,TextBlock控件的Text属性,通过Binding的方式动态的显示ViewModel中的Greeting对应的值。
namespace FirstAvalonia.ViewModels;
public class MainViewModel : ViewModelBase
{
public string Greeting => "Welcome to Avalonia!";
}
复制代码
默认创建的MainView.axaml中,只有一个TextBlock控件,它用于显示只读文本,我们还可以添加其他控件,控件的元素标签和类名相同,一个UI可以由多种不同类型的控件组成,不要如果要组织不同的控件显示在UI页面中,则需要布局控件进行排版才行。否则所有的控件都会堆积在一起。如果要添加一个按钮在在页面中,代码如下所示:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button>Hello World!</Button>
</UserControl>
复制代码
还可以通过给元素添加属性来设置空间的呈现方式,如配景色Background等属性,如果要给一个按钮设置蓝色的配景色,则可以如下设置:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button>Hello World!</Button>
</UserControl>
复制代码
在上述示例中Button按钮的包含起始标签,和结束标签,而在两个标签之间则是按钮的内容,也可以通过Content属性来设置内容。
筹划预览
在Visual Studio开发工具中,通过预览功能,我们可以实时的查看页面布局效果,方便实时调整。,如下所示:
以上就是《Avalonia系列文章之再试牛刀》的全部内容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
吴旭华
金牌会员
这个人很懒什么都没写!
楼主热帖
mamba-ssm安装building wheel卡着不动 ...
《原CSharp》第二回 巧习得元素分类 子 ...
数据库系统课程设计(高校成绩管理数据 ...
使用TrueNas(FreeNas)进行华为手机备 ...
JVM虚拟机性能监控与故障处理工具(3) ...
Spark 总复习
java中==和equals区别
【图论】—— 有向图的强连通分量 ...
【云原生】第二篇--容器管理工具 Docke ...
Vue3-使用axios发起网络请求
标签云
挺好的
服务器
快速回复
返回顶部
返回列表