码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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" >
          "Background"
                  Value="Red"/>
        Style>
      UserControl.Styles>
      <StackPanel>
        <TextBlock Text="{Binding Greeting}"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"/>
        <Button Content="Calculate"/>
        <TextBlock Classes="test add"  >HeaderTextBlock>
        <TextBlock  >HeaderTextBlock>
        <Grid ShowGridLines="True">
    
        Grid>
      StackPanel>
    UserControl>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述

    数据绑定

    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; }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    数据源

    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 = "大帅逼"
         }
    
     };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    普通模板

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

    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    改成样式Styles

    <UserControl.Styles>
      <Style Selector="ListBox.Test">
        "ItemTemplate" >
          
            
              
                "Horizontal">
                  "Id:" />
                  "{Binding Id}" />
                
                "Horizontal">
                  "Name:" />
                  "{Binding Name}" />
                
                "Horizontal">
                  "Description:" />
                  "{Binding Description}" />
                
                "Horizontal">
                  "Title:" />
                  "{Binding Title}" />
                
              
            
          
        
      Style>
    UserControl.Styles>
    
    
    <ListBox ItemsSource="{Binding People}" Classes="Test">
    
    ListBox>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

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

    在这里插入图片描述

    总结

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

  • 相关阅读:
    RHEL 8.6 Kubespray 1.23.0 install kubernetes v1.27.5
    css去掉图片底部白边
    [大模型]QAnything纯Python环境安装教程
    安全可靠的文件传输服务助力完成更高效的医疗保健工作(上)
    (附源码)基于springboot的物流配货管理系统的设计与实现 毕业设计 250858
    通过Idea或命令将本地项目上传至git
    No169.精选前端面试题,享受每天的挑战和学习
    HTML+CSS+JS网页设计期末课程大作业—— 艺术官网17页(包含登陆注册)
    GBase8s 汉字转拼音函数
    基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示应用
  • 原文地址:https://blog.csdn.net/qq_44695769/article/details/136200091
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号