Avalonia 初学笔记(2):简单了解与WPF的区别

文章目录

  • 相关链接
  • 前言
  • Avalonia相对于WPF的新特性简单介绍
  • ChatGPT推荐
  • Avalonia Demo案例
  • Avalonia 开始使用
  • Avalonia 文件扩展名
  • Avalonia Toolkit 扩展安装
  • 修改.net core版本
  • Avalonia对WPF的修改
    • 类CSS选择器
      • Style的定义
      • 简单代码
  • 数据绑定
    • 直接绑定
    • UserControl.DataContext和Design.DataContext的区别
  • 数据模板
    • 数据源准备
      • 实体类
      • 数据源
    • 普通模板
    • 改成样式Styles
  • 总结

相关链接

Avalonia UI 官网

Avalonia 官方文档

Avalonia学习笔记 CSDN博客专栏

前言

C# 上位机技术的终点有两个技术,Avalonia和Unity。Godot目前3D还是太拉了,MAUI目前也只是玩具。Avalonia是跨平台版本的WPF,而Unity是实现3D预览效果的选择。Avalonia算是上位机的终点了,我目前打算学习Avalonia+ReactiveUI

Avalonia相对于WPF的新特性简单介绍

B站_十月的寒流:Avalonia中的那些让WPF开发者相见恨晚的特性

在这里插入图片描述

ChatGPT推荐

因为Avalonia的中文资料实在是太少了,这里我们得用ChatGpt,而且最好是纯英文文档去学习。

免费的ChatGPT网址

比如我要搜一下【UserControl.DataContext and Design.DataContext 】在Avalonia里面使用的区别。为了顺便学一下英文,我这里也将使用纯英文的官方文档

在这里插入图片描述

Avalonia Demo案例

Avalonia.Samples Github仓库地址

在这里插入图片描述

下载好了要进行编译,文件挺多的,我本地编译了10分钟左右。

在这里插入图片描述

Avalonia 开始使用

Avalonia 开始使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动成功

在这里插入图片描述

Avalonia 文件扩展名

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Avalonia Toolkit 扩展安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改.net core版本

当前日期2024年2月21日,现在新建的Avalonia的项目是.net core 7.0框架。我们将这个修改为.net core 8.0
在这里插入图片描述

在这里插入图片描述

Avalonia对WPF的修改

Avalonia Get Started
在这里插入图片描述

类CSS选择器

WPF 是没有CSS选择器的,但是Avalonia有。因为CSS有点吃性能而且容易出错样式混乱,但是CSS写起来是真的方便。

Avalonia Styling

在这里插入图片描述
我们这里简单介绍一下Avalonia的Style,因为Avalonia的Style是像前端的CSS选择器一样的语法,这里不展开说明

Style的定义

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

简单代码

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:vm="clr-namespace:AvaloniaReactiveUI_Demo.ViewModels"
             mc:Ignorable="d"
             d:DesignWidth="800"
             d:DesignHeight="450"
             x:Class="AvaloniaReactiveUI_Demo.Views.MainView"
             x:DataType="vm:MainViewModel">

  <UserControl.DataContext>
    <vm:MainViewModel />
  </UserControl.DataContext>

  <UserControl.Styles>
    <Style Selector="TextBlock.test" >
      <Setter Property="Background"
              Value="Red"/>
    </Style>
  </UserControl.Styles>
  <StackPanel>
    <TextBlock Text="{Binding Greeting}"
               HorizontalAlignment="Center"
               VerticalAlignment="Center"/>
    <Button Content="Calculate"/>
    <TextBlock Classes="test add"  >Header</TextBlock>
    <TextBlock  >Header</TextBlock>
    <Grid ShowGridLines="True">

    </Grid>
  </StackPanel>
</UserControl>

在这里插入图片描述

数据绑定

Avalonia的数据绑定和WPF的数据绑定差不多。首先和和默认的分层一致

在这里插入图片描述

直接绑定

在这里插入图片描述

UserControl.DataContext和Design.DataContext的区别

这里我就直接上ChatGPT了
在这里插入图片描述
额,没怎么看懂。好像差不多吧。到时候用的时候感受一下。我这里还是保持这个UserControl.DataContext好了

数据模板

官方的数据模板我没看明白,主要他的代码不全,没有把ViewModel写出来。

Avalonia Data Templates

在这里插入图片描述

数据源准备

实体类

public class Person
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public string? Title { get; set; }
    public string? Description { get; set; }
}

数据源

public List<Person> People => new List<Person>() {
     new Person()
     {
         Name = "小王",
         Id = 1,
         Description="王哥",
         Title = "大王"
     },
     new Person()
     {
         Name = "小美",
         Id = 2,
         Description = "美美的",
         Title = "美姐"
     },
     new Person()
     {
         Name = "大帅",
         Id = 3,
         Description = "帅帅",
         Title = "大帅逼"
     }

 };

普通模板

这个是最标准的数据源绑定

<ListBox ItemsSource="{Binding People}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <StackPanel Orientation="Horizontal">
          <TextBlock Text="Id:" />
          <TextBlock Text="{Binding Id}" />
        </StackPanel>
        <StackPanel Orientation="Horizontal">
          <TextBlock Text="Name:" />
          <TextBlock Text="{Binding Name}" />
        </StackPanel>
        <StackPanel Orientation="Horizontal">
          <TextBlock Text="Description:" />
          <TextBlock Text="{Binding Description}" />
        </StackPanel>
        <StackPanel Orientation="Horizontal">
          <TextBlock Text="Title:" />
          <TextBlock Text="{Binding Title}" />
        </StackPanel>
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

在这里插入图片描述

改成样式Styles

<UserControl.Styles>
  <Style Selector="ListBox.Test">
    <Setter Property="ItemTemplate" >
      <Setter.Value>
        <DataTemplate>
          <StackPanel>
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="Id:" />
              <TextBlock Text="{Binding Id}" />
            </StackPanel>
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="Name:" />
              <TextBlock Text="{Binding Name}" />
            </StackPanel>
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="Description:" />
              <TextBlock Text="{Binding Description}" />
            </StackPanel>
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="Title:" />
              <TextBlock Text="{Binding Title}" />
            </StackPanel>
          </StackPanel>
        </DataTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</UserControl.Styles>


<ListBox ItemsSource="{Binding People}" Classes="Test">

</ListBox>

但是我看官方案例的方法不是这样的,是这么写的。我目前也不是很了解

在这里插入图片描述

总结

Avalonia对WPF最大的两个问题进行了解决,Style的CSS写法和Binding的方法。WPF的Style是纯样式继承的方法。两个各有利弊。而且Avalonia的代码提示还是比较弱的,微软啥时候能把Avalonia给收购了啊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403040.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

128.乐理基础-五线谱-纯四度、纯五度

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;127.乐理基础-五线谱-纯一度、纯八度-CSDN博客 上一个内容里练习的答案&#xff1a; 纯四度、纯五度的结论 纯四度例子&#xff1a; 例子1&#xff1a; 例子2&#xff1a; 纯四度两个条件&#xff0c;音数是2.5&a…

HTML好玩代码合集(2)

这一期HTML好玩代码合集是动态烟花文字&#xff0c;是本期里最好玩的一个HTML代码&#xff08;把文字可以改成表白的&#xff09;&#xff0c;先看效果&#xff1a; 这个效果是动态的&#xff0c;那些数字都是有烟花堆积成的&#xff0c;代码在哪里呢&#xff1f; 在这里&…

SpringBoot---集成MybatisPlus

介绍 使用SpringBoot集成MybatisPlus框架。 第一步&#xff1a;添加MybatisPlus依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependenc…

第一个Qt程序中的秘密

创建第一个程序 首先我们打开Qt Creator 打开文件->New Projects... 菜单&#xff0c;创建我们的第一个Qt项目 选择 Qt Widgets Application&#xff0c;点击选择...按钮 之后&#xff0c;输入项目名称QtLearning&#xff0c;并选择创建路径&#xff0c; 在build system中选…

Linux:gitlab创建组,创建用户,创建项目

创建组和项目 让后可以在组里创建一个个仓库 创建成员 我创建个成员再把他分配进这个组里 进入管理员 密码等会我们创建完用户再去配置密码 Regular是普通的用户&#xff0c;只可以正常去访问指定规则的项目 而下面的administrator就是管理员&#xff0c;可以随便进项目&…

springcloud:2.OpenFeign 详细讲解

OpenFeign 是一个基于 Netflix 的 Feign 库进行扩展的工具,它简化了开发人员在微服务架构中进行服务间通信的流程,使得编写和维护 RESTful API 客户端变得更加简单和高效。作为一种声明式的 HTTP 客户端,OpenFeign 提供了直观的注解驱动方式,使得开发人员可以轻松定义和调用…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0] w torch.tensor([1.0]) w.requires_grad Truedef forward(x):return x*wdef loss(x,y):y_pred forward(x)return (y_pred-y)**2…

【TCP/IP】组播

一、组播介绍 组播&#xff08;Multicast&#xff09;是网络技术中数据传输的一种方法&#xff0c;它允许将数据包同时发送给一组指定的目标&#xff0c;而不是单个的目标&#xff08;单播 Unicast&#xff09;或所有可能的目标&#xff08;广播 Broadcast&#xff09;。组播传…

WEB甘特图选型

1.火车侠 GitHub - w1301625107/Vue-Gantt-chart: 使用Vue做数据控制的Gantt图表 优点&#xff1a;有小时选项 缺点&#xff1a;不支持拖拽 2.火车侠二号 GitHub - liyang5945/vue-drag-gantt-chart: Vue拖拽甘特图 a draggable gantt-chart with vue 有点&#xff1a;实现了…

盲盒小程序开发,线上盲盒应该具备哪些功能?

盲盒在我国是一个热门行业&#xff0c;它的种类繁多&#xff0c;玩法新奇有趣&#xff0c;吸引了无数年轻人的眼光&#xff0c;发展更是经久不衰&#xff01; 随着科学技术的不断发展&#xff0c;盲盒行业也在继续保持上升趋势&#xff0c;为我国消费者带来了更多的新体验&…

Python假数据生成库之mimesis使用详解

概要 在软件开发和测试过程中,经常需要使用假数据来模拟真实环境,进行测试、演示或者填充数据库。Python Mimesis 库就是一个强大的工具,可以帮助快速、方便地生成各种类型的假数据。本文将深入探讨 Mimesis 库的功能、用法和示例代码,以帮助大家更好地了解如何利用这个库…

Kubernetes部署CNI网络组件

目录 1.概述 K8S的三种网络 VLAN和VXLAN的区别 K8S中Pod网络通信 flannel的三种模式 flannel的UDP模式工作原理 flannel的VXLAN模式工作原理 2.部署flannel 在node01节点上操作 在master01节点上操作 3.部署Calico Calico主要由三个部分组成 calico的IPIP模式工作…

免费搭建个人网盘

免费搭建一个属于个人的网盘。 服务端 详情请参考原网站的服务端下载和安装虚拟磁盘Fuse4Ui可以支持把网盘内容挂载成系统的分区&#xff1b; 挂载工具效果图&#xff1a;应用端应用端的下载 效果图

2024.2.22

将互斥机制的代码实现 #include<myhead.h> int num7; pthread_mutex_t mutex;//创建互斥锁变量 void *task1(void *arg) {printf("task1:\n");//获取锁资源pthread_mutex_lock(&mutex);num77777;sleep(2); printf("task1:num%d\n",num); //释放…

【Linux】日志命令行练习(持续更新)

文章目录 前言环境情景1. 获取实时日志2. 关键字定位3. 关键字取并集4. 关键字取交集5. 关键字取差集6. 关键字实时日志捕获7. 关键词上下文打印8. 关键词滚动搜索9. 看最早的日志信息 前言 公司生产问题需要登录堡垒机排查。 没有日志平台的情况下&#xff0c;生产问题同样要…

【Three.js】前端从零开始学习 threejs:创建第一个 threejs3D 页面

课程和学习大纲 对应的课程在这里&#xff1a;Threejs教程、2023最新最全最详细Threejs教程、零基础Threejs最详细教程&#xff08;已完结&#xff09; 学习知识要点思维导图&#xff1a; 官网和文档的使用 three.js 官网 如果无法访问&#xff0c;可以下载国内大佬的镜像…

在UE5中制作UI环形进度条

在日常开发中&#xff0c;经常会有环形进度条UI的效果&#xff0c;例如技能CD时间、加载动画等&#xff0c;本文将通过材质球节点实现该效果&#xff0c;相较于准备美术素材&#xff0c;这样的做法更为方便&#xff0c;效果如下&#xff1a; 1.制作环状效果材质函数 在内容面…

使用RingAttention处理百万长度视频和语言的世界模型

摘要 2402.08268v1.pdf (arxiv.org) 当前的语言模型在理解不容易用语言描述的世界方面存在不足&#xff0c;并且在处理复杂、长篇的任务时也存在困难。视频序列提供了语言中不存在的有价值的时间信息&#xff0c;使其与语言联合建模变得具有吸引力。这样的模型可以发展出对人…

IO进程线程day6

思维导图&#xff1a; 1.将互斥机制的代码实现重新敲一遍。 #include<myhead.h> int num520;//临界资源//创建一个互斥锁变量 pthread_mutex_t mutex;//定义任务&#xff11;函数 void *task1(void *arg) {printf("我是任务&#xff11;&#xff1a;\n");//3.…