当前位置: 首页 > news >正文

我为什么放弃WinUI3

基于WinUI3开发HiNote已经有一个多月的时间了,算是做出来一个简单能用的C端软件。

基于个人的经历,说说其中的开发体验。

UI设计语言

无论是否抄袭苹果,WinUI3给人的感觉都是眼前一亮的。简洁美观,现代化,毛玻璃的美感,就像是你刚刚遇到Win11一样,高质量的交互和效果反馈,流畅动画和鲜明的设计风格都吸引了不少现代极简主义者的关注。

从UI设计一致性来讲,无可挑剔,相同的效果如果用其他框架来替代,实现难度或者渲染成本是个指数级的工程

MVVM程序设计

不同于以往CS程序绑定属性式的过去时写法,在WinUI3最新的Demo结构中,我们能看到类似下面的文件结构:
在这里插入图片描述

  • Activation放置的View内的一些数据处理器
  • Assets作为资源库
  • Contracts定义服务抽象和ViewModel
  • Helpers提供一些工具类
  • Models作为本地模型存放,类似应用本地配置对象等
  • Services作为服务实现
  • Strings国际化资源
  • Styles全局样式库
  • ViewModels视图模型,这个是MVVM中绑定的关键
  • Views视图组件

我们的应用通过App.xaml,指定MainWindow.xaml作为启动WindowEx实现,MainWindow则通过不同的Page拼装而成,Page内的数据则用过ViewModels模型驱动显示,由此完成一个基本的项目构型。

  1. 为了上手它,你需要学什么?
  • XAML语法(XAML标识,模型绑定语法等) 10小时左右
  • ViewModel的实现设计(单向SetProperty,双向INotifyPropertyChanged)5小时左右
  • UWP中窗体句柄等机制处理 5小时左右

基本上有了这些,做出来一个简单应用不成问题。
为了解耦,我将Services的实现放到了单独项目上作为NuGet托管,以便用于其他CS(MAUI)程序中调用接口。

  1. 让我觉得难受的地方:
  • ViewModel无法复用dto模型,需要独立为XAML的绑定模型建立Model并通过访问器处理SetProperty和NotifyPropertyChanged。
  • 部分组件的一些属性,IsSelect等双绑不稳定,间歇性失效。
  • 应用首次启动速度慢
  • ViewModel的列表属性操作偶尔造成内存崩溃问题。(不清楚是不是使用原因,无法稳定复现)
  • 奇葩的包自动推送,从未成功过
    在这里插入图片描述

市场现状

由此,在开发完成后,第一时间发布了微软商店,并在小红书和技术群做了推广。
基本受众:喜欢设计的年轻人群,多是圈内人士和UWP小众粉丝。
市场占有率:
在这里插入图片描述
迄今为止,Win虽然仍作为PC主力平台,但Win10低版本及以下的用户量依然非常庞大

选择这个市场,意味着你将放弃绝大部分Windows用户,放弃Mac用户,放弃Linux用户

再谈UWP的分发模式

传统Win用户已经习惯安装setup.exe,很多地区因为网络各种问题访问Windows官方商店本身存在障碍,抛开上架审核不谈,这导致商店下载应用本身就充满坎坷。

单独打包setup.exe虽然已经有解决方案,但庞大的包体积和神奇的启动速度,还需要用户单独开启旁加载应用安全设置,这些神操作几乎堵死了独立分发包的路。

但为了 WinUI3 的华丽,我觉得都可以忍,但是…

WinUI3 本身控件生态并不成熟,本身控件具备可定制化的组件属性和组件功能(事件机等)十分局限,甚至相对于WindowsUWP本身的控件库都缺乏很多常用的有力组件。

虽然DevExpress各大顶级控件厂商已经贡献了大量免费的商业许可控件(这也算是优势之一),但依然解决不了很多技术上青涩的现状。

然后,你总在头疼太少的积木和现有积木极少的可玩性,总是缠绕在那点积木时不时给你带来点惊喜bug的头疼,而mvvm的语法相对于现代前端框架而言,简直令人折磨。

而相对于electron这些webview框架,你只需要熟悉bs开发模式,能够拥抱的用户市场和开发便利是可想而知的,那是一个自由的国度…

最后,感谢WinUI,希望UWP越来越好…

相关文章:

我为什么放弃WinUI3

基于WinUI3开发HiNote已经有一个多月的时间了,算是做出来一个简单能用的C端软件。 基于个人的经历,说说其中的开发体验。 UI设计语言 无论是否抄袭苹果,WinUI3给人的感觉都是眼前一亮的。简洁美观,现代化,毛玻璃的美…...

2023年全国最新安全员精选真题及答案2

百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.(单选题)静作用压路机在施工过程,要求实际含水量…...

计算机408考研先导课---C语言难点

以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助! 一、整型变量数的范围 类型说明符长度(字节)数的范围int4/2(有些为4字节,有些为2字节)-32768~32767short2…...

K8S 部署 Redis-Cluster 集群

本文使用 bitnami 镜像部署 redis-cluster 官方文档:https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass:集群的存储…...

[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络

编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …...

Apache Shiro与Spring Security对比

Apache Shiro VS Spring Security 1.Spring Security 官方文档:https://spring.io/projects/spring-security#overview介绍: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…...

23春招-mysql事务相关高频面试题

1、什么是事务 对于一个事务,要么事务内的sql全部执行,要么都不执行 2、 事务的特性ACID 原子性 整个事务中所有的操作要么全部提交成功,要么全部失败会滚。 一致性 数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句…...

天线理论知识1——基础概念介绍

基础概念介绍 文章目录 基础概念介绍前言一、主要参数二、天线的种类三、天线的测量前言 天线是用于发射和接收电磁波设备。其功能可以概括为转换自由空间中的电磁波和设备中的导行波。 一、主要参数 天线设计中要考虑的参数较多,包括 方向性函数:距离天线 r r r处的远区…...

【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器

【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器 一、StackEdit介绍1.StackEdit简介2.StackEdit中文版简介3.StackEdit中文版功能二、检查本地Docker环境1.检查系统版本2.检查系统Docker版本3.检查docker compose版本三、下载StackEdit镜像四、部署StackEdit…...

特征工程:特征构造以及时间序列特征构造

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 那特征工程是什么? 特征工程是利用数据领域的相关…...

单master部署简要步骤

准备多台服务器,选定一台为master例如设置ip为192.168.0.10,host: k8s.master,其他分别为 k8s.s11 192.168.0.11k8s.s12 192.168.0.12....hostname可以使用命令配置hostname k8s.masterip解析可以在hosts文件中写入,如果有内部dns解析可以在内…...

【算法基础】(一)基础算法 --- 前缀和与差分

✨个人主页:bit me ✨当前专栏:算法基础 🔥专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习 🌹 🌹 &#x1f3…...

c++提高篇——stack容器

一、stack容器的基本概念 stack是一种先进后出(FILO)的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界使用。因此该容器不能有遍历行为。基本的结构如下: stack容器有些像手枪子弹的弹夹,其数据的出入栈可以以弹夹为参考。 二、…...

HTTP安全与HTTPS协议

目录 Http协议的安全问题 常见的加密方式 防止窃听 单向散列函数 单向散列值的特点 加密与解密 对称加密与非对称加密 对称加密的密钥配送问题 密钥配送问题的解决 非对称加密 前言: 公钥与私钥 非对称加密过程 混合密码系统 前言: 混合…...

【c++】类和对象4—c++对象模型和this指针

文章目录成员变量和成员函数分开存储this指针的用途空指针访问成员函数const修饰成员函数成员变量和成员函数分开存储 在c中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person1…...

嵌入式Qt 开发一个视频播放器

上篇文章&#xff1a;嵌入式 Qt开发一个音乐播放器&#xff0c;使用Qt制作了一个音乐播放器&#xff0c;并在OK3568开发板上进行了运行测试&#xff0c;实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件&#xff0c;可以实现视频列表的显示与选择播放等&#xff0c;先…...

阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代

Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后&#xff0c;迅速在 Java 微服务生态中&#xff0c;成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上&#xff0c;保留 Java 开发习惯&#xff0c;加入分布式特性&#xff0c;提供了一系列通用工…...

边界检测方法总结

1&#xff1a;经典的边界检测方法有sobel&#xff0c;拉普拉斯&#xff0c;canny等。 sobel&#xff1a; def get_sobel(in_chan, out_chan):filter_x np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1],]).astype(np.float32)filter_y np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -…...

Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据

Softing dataFEED OPC Suite Extended V5.25的新功能——“文件读取&#xff08;File Read&#xff09;”&#xff0c;支持访问XML文件中可用的过程数据。 &#xff08;文件读取功能支持获取由XML文件提供的过程数据&#xff09;dataFEED OPC Suite Extended是用于OPC通信和云连…...

央行罚单!金融机构被罚原因揭秘

近日&#xff0c;人民银行公布了2023年首批行政处罚罚单&#xff0c;引发业内广泛关注。 顶象防御云业务安全情报中心统计了人民银行官网&#xff0c;2020年1月至2023年2月10日期间&#xff0c;公布的101份行政处罚。 统计显示&#xff0c;16家金融机构被罚27066.9万元&#…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...