从 WPF 到 MAUI:跨平台 UI 开发的进化之路
一、引言
在软件开发领域,用户界面(UI)开发一直是至关重要的环节。随着技术的不断发展,开发者对于创建跨平台、高性能且美观的 UI 需求日益增长。Windows Presentation Foundation(WPF)和 .NET Multi - platform App UI(MAUI)作为微软在 UI 开发领域的重要成果,见证了这一发展历程。本文将深入探讨 MAUI 是如何从 WPF 发展而来的,分析两者之间的关系、技术差异,并为从 WPF 开发者过渡到 MAUI 开发提供详细的指导。
二、WPF 概述
2.1 WPF 简介
WPF 是微软在 .NET 框架中引入的用于创建 Windows 桌面应用程序的 UI 框架。它于 2006 年随着 .NET Framework 3.0 一同发布,旨在为开发者提供一种现代化的方式来构建具有丰富视觉效果和交互性的桌面应用。WPF 引入了许多先进的概念,如矢量图形、动画、数据绑定和样式模板等,使得开发者能够创建出媲美专业设计软件的用户界面。
2.2 WPF 的核心技术
2.2.1 XAML
XAML(可扩展应用程序标记语言)是 WPF 的核心组成部分。它是一种声明式的标记语言,用于定义 UI 的布局和外观。通过 XAML,开发者可以将 UI 设计与代码逻辑分离,提高代码的可维护性和可测试性。以下是一个简单的 WPF 窗口的 XAML 示例:
<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><Button Content="Click Me" HorizontalAlignment="Left" Margin="200,150,0,0" VerticalAlignment="Top" Width="75"/></Grid>
</Window>
2.2.2 数据绑定
WPF 的数据绑定机制允许将 UI 元素的属性与数据对象的属性进行关联。当数据对象的属性值发生变化时,UI 元素会自动更新显示;反之,当用户与 UI 元素交互时,数据对象的属性值也会相应更新。以下是一个简单的数据绑定示例:
<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><TextBox Text="{Binding Name}" HorizontalAlignment="Left" Margin="200,150,0,0" VerticalAlignment="Top" Width="120"/><TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Margin="200,200,0,0" VerticalAlignment="Top"/></Grid>
</Window>
using System.ComponentModel;namespace WpfApp1
{public class Person : INotifyPropertyChanged{private string _name;public string Name{get { return _name; }set{_name = value;OnPropertyChanged(nameof(Name));}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}public partial class MainWindow : Window{public MainWindow(){InitializeComponent();DataContext = new Person { Name = "John Doe" };}}
}
2.2.3 样式和模板
WPF 提供了强大的样式和模板机制,允许开发者定义 UI 元素的外观和行为。通过样式和模板,开发者可以实现 UI 的统一风格和复用。以下是一个简单的样式示例:
<Window.Resources><Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="Foreground" Value="White"/><Setter Property="FontSize" Value="16"/></Style>
</Window.Resources>
<Grid><Button Content="Styled Button" HorizontalAlignment="Left" Margin="200,150,0,0" VerticalAlignment="Top" Width="120"/>
</Grid>
2.3 WPF 的局限性
尽管 WPF 为 Windows 桌面应用开发带来了许多优势,但它也存在一些局限性。其中最主要的问题是缺乏跨平台支持,WPF 应用只能在 Windows 操作系统上运行。随着移动设备和跨平台应用的普及,这一局限性使得开发者需要为不同的平台重新开发应用,增加了开发成本和时间。
三、MAUI 的诞生与发展
3.1 MAUI 简介
MAUI 是微软推出的新一代跨平台 UI 框架,它是 Xamarin.Forms 的演进版本。MAUI 旨在为开发者提供一种统一的方式来创建跨平台的移动、桌面和 Web 应用,支持 Windows、macOS、iOS、Android 等多个平台。通过 MAUI,开发者可以使用一套代码库为不同的平台构建原生体验的应用程序,大大提高了开发效率。
3.2 MAUI 的发展历程
MAUI 的发展源于 Xamarin.Forms。Xamarin.Forms 是一个跨平台的 UI 框架,允许开发者使用 C# 和 XAML 为 iOS、Android 和 Windows 等平台创建应用。然而,Xamarin.Forms 在性能和功能上存在一些不足之处,为了满足开发者对于更强大、更高效的跨平台 UI 框架的需求,微软推出了 MAUI。MAUI 整合了 Xamarin.Forms 的优点,并引入了许多新的特性和改进,如更好的性能、更丰富的控件库和对 .NET 6+ 的支持。
3.3 MAUI 的核心技术
3.3.1 XAML 继承
MAUI 继承了 WPF 的 XAML 标记语言,使得 WPF 开发者可以快速上手 MAUI 开发。XAML 在 MAUI 中同样用于定义 UI 的布局和外观,保持了声明式编程的优势。以下是一个简单的 MAUI 页面的 XAML 示例:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="MauiApp1.MainPage"><StackLayout><Button Text="Click Me" HorizontalOptions="Center" VerticalOptions="Center"/></StackLayout>
</ContentPage>
3.3.2 数据绑定和 MVVM 模式
MAUI 也支持强大的数据绑定机制,并且鼓励开发者使用 MVVM 模式来组织代码。MVVM 模式将 UI 逻辑和业务逻辑分离,提高了代码的可维护性和可测试性。以下是一个简单的 MAUI 数据绑定示例:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="MauiApp1.MainPage"><StackLayout><Entry Text="{Binding Name}" HorizontalOptions="Center" VerticalOptions="Center"/><Label Text="{Binding Name}" HorizontalOptions="Center" VerticalOptions="Center"/></StackLayout>
</ContentPage>
using System.ComponentModel;namespace MauiApp1
{public class Person : INotifyPropertyChanged{private string _name;public string Name{get { return _name; }set{_name = value;OnPropertyChanged(nameof(Name));}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}public partial class MainPage : ContentPage{public MainPage(){InitializeComponent();BindingContext = new Person { Name = "John Doe" };}}
}
3.3.3 平台特定功能
MAUI 允许开发者在跨平台代码的基础上,访问特定平台的功能。通过使用平台特定的 API 和插件,开发者可以为不同的平台提供定制化的体验。例如,在 iOS 平台上使用 Apple Pay,在 Android 平台上使用 Google Maps 等。
四、WPF 与 MAUI 的关系
4.1 继承与演进
MAUI 是 WPF 的演进版本,它继承了 WPF 的许多优秀特性,如 XAML 标记语言、数据绑定和样式模板等。这些特性使得 WPF 开发者可以快速适应 MAUI 开发,并且能够复用部分代码和开发经验。
4.2 目标差异
WPF 的主要目标是为 Windows 桌面应用开发提供强大的 UI 支持,而 MAUI 的目标是为跨平台应用开发提供统一的解决方案。MAUI 弥补了 WPF 在跨平台方面的不足,使得开发者可以使用一套代码为多个平台创建应用。
4.3 生态系统共享
WPF 和 MAUI 都属于 .NET 生态系统,它们可以共享许多 .NET 类库和工具。例如,开发者可以使用相同的 C# 语言和 Visual Studio 开发环境进行开发,并且可以利用 .NET 生态系统中的各种开源库和插件。
五、WPF 与 MAUI 的技术差异
5.1 跨平台支持
WPF 仅支持 Windows 平台,而 MAUI 支持 Windows、macOS、iOS、Android 等多个平台。这意味着使用 MAUI 开发的应用可以在不同的操作系统和设备上运行,大大扩展了应用的受众范围。
5.2 控件和布局
虽然 WPF 和 MAUI 都使用 XAML 来定义 UI,但它们的控件和布局系统存在一些差异。MAUI 提供了一套跨平台的控件库,这些控件在不同的平台上具有相似的外观和行为。而 WPF 的控件则是专门为 Windows 平台设计的,具有 Windows 特定的风格和功能。例如,MAUI 的 StackLayout
布局在不同平台上的表现是一致的,而 WPF 的布局系统可能会受到 Windows 操作系统的影响。
5.3 性能优化
MAUI 在性能优化方面进行了许多改进,特别是在移动平台上。它采用了更高效的渲染引擎和资源管理机制,使得应用在不同的设备上都能获得良好的性能表现。相比之下,WPF 主要针对 Windows 桌面进行优化,在移动设备上的性能可能不如 MAUI。
5.4 开发工具和环境
WPF 开发主要使用 Visual Studio 作为开发工具,并且依赖于 .NET Framework。而 MAUI 开发需要使用 Visual Studio 2022 及以上版本,并且依赖于 .NET 6+。此外,MAUI 开发还需要安装相应的移动开发工具和 SDK,如 Android SDK 和 iOS SDK。
六、从 WPF 进入 MAUI 开发的步骤
6.1 环境准备
6.1.1 安装 Visual Studio 2022
确保你已经安装了 Visual Studio 2022,并且选择了 .NET Multi - platform App UI 开发工作负载。
6.1.2 安装移动开发工具和 SDK
根据你的开发需求,安装 Android SDK 和 iOS SDK。在安装过程中,需要配置相应的环境变量和开发证书。
6.2 学习 MAUI 基础知识
6.2.1 XAML 语法
虽然 MAUI 的 XAML 语法与 WPF 相似,但还是有一些细微的差异。需要学习 MAUI 中特有的 XAML 标签和属性,如 ContentPage
、Shell
等。
6.2.2 跨平台开发概念
了解 MAUI 的跨平台开发概念,如平台特定代码、资源管理和设备适配等。
6.3 迁移 WPF 代码到 MAUI
6.3.1 UI 迁移
将 WPF 的 XAML 代码迁移到 MAUI 中,需要注意控件的替换和布局的调整。例如,将 WPF 的 Window
替换为 MAUI 的 ContentPage
,将 Grid
布局调整为适应 MAUI 的布局方式。
6.3.2 业务逻辑迁移
将 WPF 的业务逻辑代码迁移到 MAUI 中,由于两者都使用 C# 语言,大部分业务逻辑代码可以直接复用。但需要注意一些与平台相关的代码,如文件操作、网络请求等,需要进行适当的调整。
6.4 实践项目开发
通过实践项目来巩固所学的知识。可以从简单的示例项目开始,逐渐过渡到复杂的应用开发。在开发过程中,遇到问题可以参考 MAUI 的官方文档和社区论坛。
七、结论
从 WPF 到 MAUI 的发展,体现了微软在 UI 开发领域的不断创新和进步。WPF 为 Windows 桌面应用开发提供了强大的支持,而 MAUI 则满足了开发者对于跨平台应用开发的需求。两者之间既有继承关系,又存在明显的技术差异。对于 WPF 开发者来说,通过学习和实践,可以顺利过渡到 MAUI 开发,利用 MAUI 的跨平台优势,为不同的平台创建高质量的应用程序。随着技术的不断发展,MAUI 有望成为跨平台 UI 开发的主流框架。
相关文章:
从 WPF 到 MAUI:跨平台 UI 开发的进化之路
一、引言 在软件开发领域,用户界面(UI)开发一直是至关重要的环节。随着技术的不断发展,开发者对于创建跨平台、高性能且美观的 UI 需求日益增长。Windows Presentation Foundation(WPF)和 .NET Multi - pl…...
Docker学习之dockerfile篇(day8)
文章目录 前言一、问题描述二、具体内容1. Docker 镜像原理2. Docker 镜像制作3. Dockerfile 概念Dockerfile 的基本结构: 4. Dockerfile 关键字5. Docker 实战案例5.1 基于 Nginx 构建 Web 服务器 6. 验证与总结6.1 验证 Dockerfile6.2 总结 前言 Docker 是一种轻…...
Kotlin 作用域函数:apply、let、run、with、also
在 Kotlin 开发中,作用域函数(Scope Functions)是一组能让代码更简洁、更函数式的高阶函数。它们通过不同的作用域规则和返回值设计,解决了对象配置、空安全处理、链式操作等常见场景问题。本文将结合核心特性、代码示例和对比表格…...
Java 线程池与 Kotlin 协程 高阶学习
以下是Java 线程池与 Kotlin 协程 高阶学习的对比指南,结合具体代码示例,展示两者在异步任务处理中的差异和 Kotlin 的简化优势: 分析: 首先,我们需要回忆Java中线程池的常见用法,比如通过ExecutorService创…...
C++学习笔记(三十三)——forward_list
一、std::forward_list (1) forward_list与其适用场景 std::forward_list 是 C的STL中的单向链表(Singly Linked List),它相比 std::list(双向链表)更轻量,适用于仅需要单向遍历的场景。 主要特点&#…...
ROS订阅相机图像识别颜色并发布识别信息
一、前言 区别于之前的直接驱动相机,这里改为读取图像话题进行处理,原因是如果opencv驱动相机后只能单一使用,就限制了其他识别功能(除非将原始图像发布出来),所以这里改成可以读取任意相机图像话题的方法…...
Redis-15.在Java中操作Redis-Spring Data Redis使用方式-操作集合类型的数据
一.操作集合类型的数据 package com.sky.test;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.*;import j…...
第十一届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
1.字串排序 不会做,感觉挺难的,有兴趣的可以看下面题解 #include <iostream> #include <string.h> using namespace std; int V; int len;//符合交换次数V,字符串长度最小值 int now; //当前已经构造好的那一部分字符串逆序对个数…...
CentOS 安装 zip
安装软件 sudo yum install zip unzip # CentOS 7 sudo dnf install zip unzip # CentOS 8/9压缩文件 # 压缩单个文件 zip 压缩包名.zip 文件1# 压缩多个文件 zip 压缩包名.zip 文件1 文件2 文件3# 压缩目录(包含子目录) zip -r 压缩包名.zip 目…...
FastPillars:一种易于部署的基于支柱的 3D 探测器
FastPillars:一种易于部署的基于支柱的 3D 探测器Report issue for preceding element Sifan Zhou 1 , Zhi Tian 2 , Xiangxiang Chu 2 , Xinyu Zhang 2 , Bo Zhang 2 , Xiaobo Lu11{}^{1}start_FLOATSUPERSCRIPT 1 end_FLOATSUPERSCRIPT11footnotemark: 1 Chengji…...
LVS高可用负载均衡
一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm,keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm,keepalivedNAT192.168.72.117/24 VIP 192.168…...
Kafka延迟队列实现分级重试
技术方案 方案背景 Kafka队列消息消费处理过程中,发生处理异常,需要实现重试机制,并基于重试次数实现不同延迟时间重试方案。 方案介绍 通过实现Kafka延迟队列来实现消息重试机制。 目标: 支持所有业务场景的延迟重试支持多…...
谷粒微服务高级篇学习笔记整理---异步线程池
多线程回顾 多线程实现的4种方式 1. 继承 Thread 类 通过继承 Thread 类并重写 run() 方法实现多线程。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("线程运行: " Thread.currentThread().getName());} }// 使用 pub…...
3.第二阶段x64游戏实战-分析人物移动实现人物加速
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:2.第二阶段x64游戏实战-x64dbg的使用 想找人物的速度,就需要使用Ch…...
MQTT 服务器(emqx)搭建及使用(一)
一. EMQX 服务器搭建 1.下载EMQX 下载链接:Windows | EMQX 文档 官方手册 2.下载内容解压至盘符根目录 3.进入bin文件夹,在地址栏输入cmd 4.依次输入下面命令安装服务 .\emqx.cmd install .\emqx.cmd console 5.设置自启动 创建批处理文件&#x…...
什么是SSE和websocket
以下是 SSE(Server-Sent Events) 和 WebSocket 在大模型(如 ChatGPT)流式输出中的实际例子对比,包含代码实现和场景分析: —### 1. SSE(Server-Sent Events)#### 场景 大模型生成文本…...
蓝桥杯专项复习——二分查找、二分答案
目录 二分查找、二分答案基础知识 二分查找模版 【模版题】数的范围 借教室 二分查找、二分答案基础知识 二分模版 二分查找 【模版题】数的范围 输入样例 6 3 1 2 2 3 3 4 3 4 5输出样例 3 4 5 5 -1 -1 思路: 对应两个模版,起始位置是对应第一…...
Android学习总结之Kotlin 协程
一、引言 在 Android 开发中,异步任务处理是绕不开的话题。传统的线程、Handler、AsyncTask 等方案要么过于繁琐,要么存在生命周期管理问题。Kotlin 协程的出现,以优雅的语法和强大的结构化并发能力,成为解决异步编程难题的理想方…...
docker的与使用
1 docker初体验 1.1 docker简介 问题:为什么会有docker出现? 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对…...
解决ubuntu18.04无法进入系统桌面
解决ubuntu18.04无法进入系统桌面 解决ubuntu18.04无法进入系统桌面前言1、原因2、解决现象总结 前言 Vmware虚拟机运行跑Linux项目,没有关掉运行的进程就关机,导致系统无法进入系统桌面,一直卡在系统的初始化界面,按下快捷键发…...
Docker学习之容器虚拟化与虚拟机的区别(day11)
文章目录 前言一、问题描述二、具体内容1. 虚拟机(VM)2. 容器虚拟化(Docker)容器虚拟化的核心技术 三、总结1. 资源占用对比2. 适用场景3. 结论 前言 在现代软件开发和部署过程中,Docker 和虚拟机(VM&…...
无人机数据链技术及运行方式详解!
一、无人机数据链技术要点 1. 通信传输技术 频段选择: 常用频段包括 L波段(1-2 GHz)、C波段(4-8 GHz)、Ku/K波段(12-40 GHz),不同频段在传输距离、带宽和抗干扰性间权衡。 低…...
【JavaEE】MyBatis - Plus
目录 一、快速使用二、CRUD简单使用三、常见注解3.1 TableName3.2 TableFiled3.3 TableId 四、条件构造器4.1 QueryWrapper4.2 UpdateWrapper4.3 LambdaQueryWrapper4.4 LambdaUpdateWrapper 五、自定义SQL 一、快速使用 MyBatis Plus官方文档:MyBatis Plus官方文档…...
设计模式 三、结构型设计模式
一、代理模式 代理设计模式(Proxy Design Pattern)是一种结构型设计模式,它为其他对象提供了一个代理,以控制对这个对象的访问。 代理模式可以用于实现懒加载、安全访问控制、日志记录等功能。简单来说,代理模式 就是通…...
视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验
264、x265、libaom、vvenc 对比测试实验 测试机器配置:Apple M1 Pro -16G编码器版本(选择自己编译):所有源码都是当前最新更新的状态,此外各类编码具体的编译过程可参考我的相关系列博客。 编码器GitHubx264git clon…...
JMeter脚本录制(火狐)
录制前准备: 电脑: 1、将JMeter证书导入,(bin目录下有一个证书,需要安装这个证书到电脑中) 2、按winr,输入certmgr.msc,打开证书,点击下一步,输入JMeter证书…...
10、Linux C 网络编程(完整版)
1、网络发展历史和分层 1.1 Internet 的历史 起源: 1957 年:苏联发射第一颗人造卫星 "Sputnik"。 1958 年:美国总统艾森豪威尔成立 DARPA(国防部高级研究计划署)。 1968 年:DARPA 提出 "…...
拼多多 anti-token unidbg 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 版本7.3-7.4 都试过加密没什…...
Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析
Swoole 的 Hyperf 框架和 Go 的 Gin 框架虽然都支持高并发,但它们的实现原理、底层机制和适用场景有显著差异。以下从 高并发原理、技术实现区别、优缺点 三个方面详细分析: 一、高并发实现原理 1. Hyperf (PHP Swoole) Hyperf 的高并发能力基于 Swoo…...
CSS3学习教程,从入门到精通,CSS3 媒体查询实现响应式布局语法指南(21)
CSS3 媒体查询实现响应式布局语法指南 一、媒体查询核心语法 1. 基础语法结构 media 媒体类型 and (媒体特性) {/* 匹配条件时应用的CSS规则 */ }2. 媒体类型(可省略) 类型值说明all所有设备(默认值)screen屏幕设备print打印机…...
C#中,什么是委托,什么是事件及它们之间的关系
1. 委托(Delegate) 定义与作用 委托是类型安全的函数指针,用于封装方法,支持多播(链式调用)。核心能力:将方法作为参数传递或异步回调。 使用场景 回调机制(如异步操作完…...
【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
🚀 力扣热题 347:前 K 个高频元素(详细解析) 📌 题目描述 力扣 347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率 前 k 高的元素。你可以按 任意顺序 返回答案。 …...
②EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
型号 协议转换通信网关 EtherCAT 转 Modbus TCP 配置说明 网线连接电脑到模块上的 WEB 网页设置网口,电脑所连网口的网段设置成 192.168.1.X(X 是除 8 外的任一数值)后,打开浏览器,地址栏输入 192.168.1.8 ÿ…...
微服务集成测试 -华为OD机试真题(A卷、Python)
题目描述 现在有n个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次,服务自身启动加载会消耗一些时间。 给你一个n n 的二维矩阵useTime,其中useTime[i][i]10表示服务i自身启动加载需…...
k8s常用总结
1. Kubernetes 架构概览 主节点(Master): 负责集群管理,包括 API Server、Controller Manager、Scheduler 和 etcd 存储。 工作节点(Node): 运行 Pod 和容器,包含 kubelet、kube-pr…...
【算法】并查集基础讲解
一、定义 一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,只要找到了某个元素的的树根,就能确定它在哪个集合里。 …...
探索PHP的未来发展与应用趋势
PHP,作为Web开发领域的常青树,自1995年诞生以来,始终在动态网页开发中占据重要席位。随着技术的不断演进,PHP也在持续更新,以适应现代开发需求。本文将深入探讨PHP的最新发展动态及其在2025年的应用趋势。 PHP 8&…...
C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题
C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题 解决方法: 1.将C#采用的平台从AnyCpu改成X64 2.将官网下载的“Microsoft Access 2010 数据库引擎可再发行程序包AccessDatabaseEngine_X64”文件解压 3.安装解压后的文件 点击下载安…...
ubuntu22.04.5安装docker,解决安装出现的错误,解决Docker hello-world没打印出来
文章目录 前言一 安装失败解决1结合具体报错分析2 首先怀疑是VPN的问题3 直接百度报错信息4最终解决问题 二 验证Docker hello-world没打印出来总结 前言 先说一下前面的情况,使用的是公司的工作站,登录公司一个帐号使用的公司网络,使用网上…...
HMTL+JS+CSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式
HMTLJSCSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式(可以穿墙死不了,从左边进去可以从右边出来),显示当前分数和最高分,吃到的球颜色可以叠加到蛇身体上 为了适配手机端…...
vue将页面导出成word
方法一:使用 html-docx-js html-docx-js 是一个轻量级的库,可以将 HTML 转换为 Word 文档。 安装依赖 首先安装 html-docx-js: Bash深色版本 npm install html-docx-js --save创建导出逻辑 在 Vue 组件中实现导出功能的代码如下࿱…...
Spring MVC 页面跳转方案与区别
SpringMVC 的页面跳转方案主要分为 转发(Forward) 和 重定向(Redirect) 两类,具体实现方式和区别如下: 一、页面跳转方案 1. 转发(Forward) 默认方式:直…...
Open GL ES ->纹理贴图,顶点坐标和纹理坐标组合到同一个顶点缓冲对象中进行解析
XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyGLSurfaceView2 xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/glSurfaceView"android:layout_width"matc…...
题解:AT_arc050_c [ARC050C] LCM 111
一道比较简单的题。(我绝对不会告诉你这题我改了很久) 题目意思很简单,我就不过多解释了,我们直接进入正题。 题目要我们求 a a a 个 1 1 1 组成的数与 b b b 个 1 1 1 组成的数的最小公倍数除以 m m m 后的余数。先不考虑…...
【408--考研复习笔记】计算机网络----知识点速览
目录 一、计算机网络体系结构 1.计算机网络的定义与功能: 2.网络体系结构相关概念: 3.OSI 七层模型与 TCP/IP 模型: 4.通信方式与交换技术: 电路交换 报文交换 分组交换 5.端到端通信和点到点通信: 6.计算机…...
ISIS报文
IS-IS 报文 目录 IS-IS 报文 一、报文类型与功能 二、报文结构解析 三、核心功能特性 四、典型应用场景 五、抓包数据分析 六、总结 IS-IS(中间系统到中间系统)协议报文是用于链路状态路由协议中网络设备间交换路由信息的关键载体,其设…...
FPGA——分秒计数器
文章目录 一、实验任务二、系统模块三、工程源码四、管脚信息五、运行结果参考资料总结 一、实验任务 在DE2-115板子上用 Verilog编程实现一个分秒计数器,并具备按键暂停、按键消抖功能。 二、系统模块 分频模块 高频时钟(如50MHz)分频得到…...
【Java】JVM
一、JVM体系结构 1、虚拟机概述 虚拟机(Virtual Machine):一台虚拟的计算机,指一种特殊的软件,他可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于这个软件所创建的环境来操作软件。虚拟机…...
vue中使用geoscene无法出现弹窗
项目场景: 平日对地图加载使用不复杂的情况下,我通常采用leaflet去加载地图做一些简单的操作。但是最近需要用到arcgis发布的地图服务加载三维场景,于是又用回了geoscene(arcgis国产化)。这下暴露出很多的问题&#x…...
【Go】数组
数组Array 重点: 数组是值类型 注意点: 1. 数组:是同一种数据类型的固定长度的序列。2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义&…...