Avalonia ui是一个令人愉快的框架,您想一次又一次返回。 因此,让我们再次回到它,并在我的消息框中查看一些功能。

谁是阿瓦隆?
Avalonia是一个跨平台框架,允许您在所有当前平台上开发图形界面。
在结构上,它非常接近wpf:相似的xaml,相似的绑定。 甚至有WPF开发人员的官方
教程 。
Avaloniya还值得注意的是,它在每个系统上都访问其本机接口:Win32,MonoMac,X11 ...
更新版本中出现了什么- 支持13种不同的消息图标。
- 能够使用Cntrl + C组合键复制邮件正文。
- 将窗口的大小调整为其内容。
- 简化的样式系统,使任何人都可以轻松地参与新程序的开发和支持。
- 用TextBox替换TextBlock,现在可以选择窗口中的文本。
- 该架构本身已被完全重新设计。

可以在
gitlab上找到文档。
包本身可以从
nuget下载。
让我们谈谈功能
显然,如果有比较,它将与wpf进行比较。
在ms的框架之后,引起您注意的第一件事是将命令绑定到方法的能力。 是的,从功能上讲,它提供的机会较少,但是作为响应,它简化了开发视图模型的方法。
<Button Command = "{Binding RunTheThing}" CommandParameter = "Hello World"> Do the thing! </ Button>
public void RunTheThing (string parameter) {
Avaloniya也使用响应式扩展构建,该响应式扩展允许使用LINQ声明性查询语法像第一类对象一样处理框架事件-允许您编写简洁易读的代码。
但是再深入一点,一切都不会变得那么乐观和明显,并且文档还没有被想到(但是您可以提供帮助)。
绑定到图像
更新项目时,我几乎立即遇到的问题是如何在窗口上显示图像。
首先,您需要将带有图像的目录注册为雪茄的资源,因为将图标显示在任何用户中并方便地打包完整的代码非常重要。
<ItemGroup> ... <AvaloniaResource Include = "Assets \ *" /> </ ItemGroup>
现在,您可以轻松地在image标签中设置选定的图像。
<Image Source = "/ Assets / error.ico" />
但是,在使用vm Source时,不能简单地将图像通过管道传递给字符串,而必须使用Bitmap。
<Image Source = "{Binding ImagePath}" />
public Bitmap ImagePath {get; private set; }
并且,因此,现在我们需要从资源中提取图像。 您需要使用定位器阿瓦隆。
ImagePath = new Bitmap (AvaloniaLocator.Current.GetService <IAssetLoader> () .Open (new Uri ($ "avares: // ASSEMBLYNAME / relative / project / path / {ImageName} .ico")));
应该注意的是,对于编译uri时的嵌入式资源,使用前缀
resm:// ,而对于avalonia-
avares:// 。
画图
雪崩和wpf中的数字相似,但公共属性不同。 因此,在下载svg图像并将其使用inskape转换为ms xaml之后,无法立即访问它们。
任意形状
<PathGeometry Figures = "M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" FillRule = "NonZero" />
变成
<GeometryDrawing Brush = "# FF50C8EF" Geometry = "M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" />
一条线
<Line X1 = "25" Y1 = "37" X2 = "25" Y2 = "39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeMiterLimit = "10" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" />
变成
<Line StartPoint = "25.37" EndPoint = "25,39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" />
款式
文档中对样式本身进行了充分的描述。
值得注意的是,这些是熟悉的样式,带有少量的CSS。
我想展示如何从单独的文件中应用样式。
首先,所有xaml文件必须是阿瓦隆资源。
<ItemGroup> <AvaloniaResource Include = "** \ *. Xaml"> <SubType> Designer </ SubType> </ AvaloniaResource> ..... </ ItemGroup>
其次,使用uri和locator以与图像资源相同的方式应用样式。
YourControl.Styles.Add (new StyleInclude (new Uri ("avares: //ASSEMBLYNAME/relative/project/path.xaml")) {Source = new Uri ("avares: // ASSEMBLYNAME / relative / project / path.xaml ")});
好东西。
TextBox具有水印属性
这样就不必寻找第三方程序包,也不能将TextBlock置于TextBox之上,而在很多wpf教程中都可以阅读。
<TextBox Watermark = "Street address" />
同样,所有默认绑定都使用PropertyChanged来触发关联属性的更新。
总结
我建议所有人尝试这个有趣的框架。
感谢用户
Artyom Gorchakov和
Nikita Tsukanov 。
我要提醒您,雪茄在
Gitter中有舒适而惊人的支持。