使用自定义MessageBox的AvaloniaUI功能

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



谁是阿瓦隆?


Avalonia是一个跨平台框架,允许您在所有当前平台上开发图形界面。

在结构上,它非常接近wpf:相似的xaml,相似的绑定。 甚至有WPF开发人员的官方教程

Avaloniya还值得注意的是,它在每个系统上都访问其本机接口:Win32,MonoMac,X11 ...

更新版本中出现了什么
  1. 支持13种不同的消息图标。
  2. 能够使用Cntrl + C组合键复制邮件正文。
  3. 将窗口的大小调整为其内容。
  4. 简化的样式系统,使任何人都可以轻松地参与新程序的开发和支持。
  5. 用TextBox替换TextBlock,现在可以选择窗口中的文本。
  6. 该架构本身已被完全重新设计。


可以在gitlab上找到文档。

包本身可以从nuget下载。

让我们谈谈功能


显然,如果有比较,它将与wpf进行比较。

在ms的框架之后,引起您注意的第一件事是将命令绑定到方法的能力。 是的,从功能上讲,它提供的机会较少,但是作为响应,它简化了开发视图模型的方法。

<Button Command = "{Binding RunTheThing}" CommandParameter = "Hello World"> Do the thing! </ Button> 

  public void RunTheThing (string parameter) { // Code for executing the command here. } 

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 GorchakovNikita Tsukanov

我要提醒您,雪茄在Gitter中有舒适而惊人的支持。

Source: https://habr.com/ru/post/zh-CN457116/


All Articles