V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

请教个关于桌面应用开发的问题

  •  
  •   zxCoder · 361 天前 · 3088 次点击
    这是一个创建于 361 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在 windows 原生桌面开发能做到 win11 类似的界面吗?需要自己写还是说原生开发就自带了那些组件?

    第 1 条附言  ·  361 天前

    准备先试试wpf和electron

    electron是js生态的,确实比较强大,主要是包太大了,估计整完一个安装包得200+M,安装完得500+M,怕是把用户给吓跑了

    WPF试了下helloworld,打包成单文件只有150k大小,用户再单独下载一个.net6 runtime,差不多8M多,安装完就能跑了,感觉还不错?虽然要手动安装runtime可能有些人也不喜欢,见仁见智吧

    WPF的问题是,我现在还搞不清楚windows 桌面开发的一些名词,win form, WPF, WinUI,MAUI,Avalonia,xamarin 等等,整迷糊了

    第 2 条附言  ·  361 天前

    还漏了个Blazor,太多名词了。。。。

    第 3 条附言  ·  360 天前

    有大哥知道这种算是什么框架吗?

    https://github.com/NetDimension/NanUI

    我在找ui 控件时发现的,感觉像是winform套了个浏览器?那这种应用的体验和原生相比怎么样呢?

    38 条回复    2022-04-01 16:13:18 +08:00
    3dwelcome
        1
    3dwelcome  
       361 天前
    现在 windows 原生基本上很少用 C++了,全部都是 C#。

    B 站有教程,好像写到后面,组件堆砌还是很复杂。除非你程序就那么几个按钮。

    试一下 electron 吧,那是真的省心省力。
    ysc3839
        2
    ysc3839  
       361 天前 via Android
    如果你说的是 Fluent Design 那种,那可以做到,直接用 Xaml Island + WinUI 2 就行,组件都是 XAML 和 WinUI 提供的。
    zxCoder
        3
    zxCoder  
    OP
       361 天前
    @3dwelcome js 水平也是半桶水...,electron 试过好像配置挺复杂的,而且打包出来很大
    nicevar
        4
    nicevar  
       361 天前
    原生的运行组件应该有版本要求的,win10 某个版本以上,如果做的应用不是很重要,可以用 Electron ,打出来的包确实比较大,前阵子给客户做了一个打包出来 400 多 M ,用 Qt 的话要不了 50M 。
    3dwelcome
        5
    3dwelcome  
       361 天前
    @zxCoder 个人非常不倾向于原生直接开发。

    原因是现在 GUI 跨平台解决方案,比起以前成熟不少,选择也多。比如 QT 之类。

    就算原生开发,组件复杂后代码量也不少。普通人 JS 写个 VUE 组件,再怎么也比 C#里写要快。
    zxCoder
        6
    zxCoder  
    OP
       361 天前
    @3dwelcome 有道理,先用 electron 试试
    zxCoder
        7
    zxCoder  
    OP
       361 天前   ❤️ 1
    @3dwelcome 试了不到一个小时,就卡住了 hhh ,按官网的打包教程就一直报错,搜到了 github 和 statckoverflow 上好几个为解决的 issue (
    shawnsh
        8
    shawnsh  
       361 天前 via Android
    @3dwelcome 原生不原生开发是看具体项目的,别以为跨平台是万能的,里面坑可不少。项目灵活度还是应该考虑的,跨平台灵活度太低,适应范围有限
    Chad0000
        9
    Chad0000  
       361 天前
    能固定 Windows 这个环境的话,直接就上 WPF 了。
    ysc3839
        10
    ysc3839  
       361 天前   ❤️ 1
    怀疑是 X-Y Problem coolshell.cn/articles/10804.html
    建议楼主说一下原始需求
    3dwelcome
        11
    3dwelcome  
       361 天前
    @zxCoder 我就把 electron 当成一个 webview 来用的,相对来说都比较顺利。
    singerll
        12
    singerll  
       361 天前 via Android   ❤️ 2
    electron 是真的垃圾,总有一种卡顿的感觉。这种桌面应用不到万不得已我从来不装。

    别跟我说是你不会优化,你看 vscode 都多好啥的,这就跟我说高中学历不行你非要拿比尔盖兹给我举例子一样,没有意义。
    maichael
        13
    maichael  
       361 天前
    没有跨平台需求强上 Electron 就是给自己找麻烦。
    3dwelcome
        14
    3dwelcome  
       361 天前
    @singerll electron 不垃圾的,就是一个 chrome 浏览器内核+nodejs 的合体。

    不卡,可以用 wasm 替代 js 来运行逻辑。
    不顿,可以用 websocket 长连接替代传统 http restapi 。

    要说唯一的缺点,那可能确实体积有点大。
    zxCoder
        15
    zxCoder  
    OP
       361 天前
    @ysc3839 啊 原始需求就是要做一个 windows 桌面应用(也会考虑跨平台,但不是最急需的),然后很喜欢 win11 的 ui 风格,就不知道现在 windows 的原生开发是不是直接用自带的组件就是那个样子。

    如果需要自己写样式或者用第三方 ui 库就有点麻烦了,不如前端的生态丰富
    ysc3839
        16
    ysc3839  
       361 天前 via Android
    @zxCoder 一定要原生(WinUI)且跨平台的话大概只能使用 React Native 。建议考虑清楚跨平台重要还是原生风格重要。
    leyviw
        17
    leyviw  
       361 天前 via iPhone
    Electron 或 cef
    singerll
        18
    singerll  
       361 天前   ❤️ 2
    @3dwelcome 我并没有说 electron 技术垃圾,我说的是用户体验垃圾,注意是用户体验不是开发者体验。

    什么 wasm 、websocket 的再快,也需要网络加载时间,跟原生 ui 加载根本不一个等级。

    况且他用啥技术我根本不关心,我是以一个普通用户的角度来评价 electron 的桌面应用,目前为止用的 electron 写的应用,根本就没见过一个不卡顿的,就连优化最好的 vscode ,天生都有一种卡顿的感觉。

    至于体积大,确实是缺点,但肯定不是唯一的缺点。
    MakHoCheung
        19
    MakHoCheung  
       361 天前
    @zxCoder 现在最新的不是 Windows SDK + WinUI3 吗,还有即将到来的可以跨平台的 MAUI ,想到用 Electron 为啥不用 Compose for Desktop
    zxCoder
        20
    zxCoder  
    OP
       361 天前   ❤️ 2
    @3dwelcome 换了个第三方的打包工具总算成了,弄了个 helloworld ,安装包 120+M ,安装完 350+M 哈哈哈确实够大的
    icyalala
        21
    icyalala  
       361 天前
    原生现在无非就是 WPF 、WinForm 、QT ,你想要的基础组件都有。
    Electron 的问题是:它只对开发者友好,但不是所有开发者都能达到 VSCode 团队的水平,因此它对用户不友好。
    wzwb
        22
    wzwb  
       361 天前 via Android
    可以试试 Tauri ,比 Electron 小很多
    woxihejinghao
        23
    woxihejinghao  
       361 天前
    建议了这么多。为啥没有建议 flutter 的
    lower
        24
    lower  
       361 天前
    webview2
    zxCoder
        25
    zxCoder  
    OP
       361 天前
    @wzwb 这个感觉不错,就是居然是 rust... 难度++。
    pengtdyd
        26
    pengtdyd  
       361 天前
    @woxihejinghao 现在用 flutter desktop 绝对是个天坑!!!我觉的还是 electron 更好,生态好!至于原生的开发框架,我不是很推荐,因为时代在发展,跟随主流才能更好的发展。
    ysc3839
        27
    ysc3839  
       361 天前   ❤️ 1
    Win11 并没有使用 WPF 来开发界面,WPF 默认的界面风格也和 Win11 的原生风格相差很大,你需要使用第三方的组件库才能得到类似 Win11 的风格。
    至于那堆名词,WinUI 和 C# 或 .NET 没有关系,其他都和 C# 或 .NET 有关系。
    ITACHIJAMES
        28
    ITACHIJAMES  
       361 天前
    Eletron 水平一般的真的很难做好,卡,臃肿。
    Win 原生开发推荐 WPF ; Blazor 和 Eletron 有点像,可以看作是 Web ; MAUI 是最新的架构,推荐,但可能有坑; Xamrian 已经被代替了不用管; Avalonia 是一个还不错的框架。写 C#你会享受的。
    FrankAdler
        29
    FrankAdler  
       361 天前 via iPhone
    win11 才能用 winui3 ,暂时不用考虑,主用 winform 或者 wpf 就行了,考虑到新手上手难度建议先用 winform ,我前段时间从零自学写个小工具,半天就写好了,wpf 感觉稍微难点
    zenghx
        30
    zenghx  
       361 天前 via Android
    那天看到 flutter for Windows 的宣传视频,貌似可以
    zxCoder
        31
    zxCoder  
    OP
       361 天前
    话说…有人推荐 pyqt 吗 这跟上面这些框架是一个类型的东西吗?
    bequt
        32
    bequt  
       361 天前
    有谁还记得那个 VB6.0
    kingfalse
        33
    kingfalse  
       360 天前 via Android
    Java swt 。。。
    Vaspike
        34
    Vaspike  
       360 天前
    直接 Compose-desktop
    sunbreak
        35
    sunbreak  
       360 天前 via iPhone   ❤️ 2
    楼主最好先说下自己的情况,比如做过什么项目,擅长什么语言和框架

    - 擅长 C++,推荐 Qt ,不推荐 Win 的 C++直接开发

    - 擅长 C#,推荐 WinUI 2/3 的 UI 层,用 WindowsAppSdk 接口层(兼容 WinForm 和 WPF 框架)

    - 擅长 Java/Kotlin ,推荐 Compose for Desktop ,JetBrains 出品有保障

    - 擅长 TS/JS ,推荐 Electron 或者 ReactNative-Windows ,后者是微软官方支持,其实 Win11 的 Settings 是用 RN-Win 写的

    - 其他,推荐 Flutter Windows ,我估计你也不是要开发很复杂的应用(否则就得研究深入研究前面某一个框架)

    - 不推荐 Tauri ,如果是纯 Rust 团队还行,其他情况 Rust 做 UI 对个人学习压力和画组件速度都不占优

    - 如果熟悉 Go ,甚至可以试试 GoVCL

    利益相关:主要做移动跨平台架构,但也对接过不少桌面需求
    zxCoder
        36
    zxCoder  
    OP
       360 天前
    @sunbreak 情况就是又菜要求还高.... 是个逻辑还比较复杂的应用,想弄好看点,但是也想要性能稍微好点。 自己的话没有特别擅长的语言,反正语法都差不多能写,主要就是一些配置会比较复杂难懂一些。考虑到逻辑需求比较多,所以排除了 c++ rust go

    剩下的 winform 试了下,主要就是一个问题,太丑哈哈,compose for desktop ,也试了下,感觉相比 c#没什么优势,electron 是包太大,而且也蛮复杂的,跟写 web 也不太一样。
    sunbreak
        37
    sunbreak  
       360 天前
    @zxCoder

    这样看以下是比较靠谱的选择了,都是官方支持,UI 上有保障

    - ReactNative-Windows
    - WinUI 3 + WindowsAppSdk
    youyouyou0123456
        38
    youyouyou0123456  
       360 天前
    会啥用啥。nanui 看了一眼似乎就是 winform 嵌套 cef ,就是在 winform 中放了个浏览器。
    我 wpf 开发的项目比较多,我一般都是维护自己一套控件库,不过如果你想直接用别人的控件库 https://github.com/Carlos487/awesome-wpf 可以在这个 github 里面找找,还是有很多开箱即用控件库的。
    对 UI 和开发效率有要求,就不要用 winform ,qt 。
    如果项目复杂且对性能,文件大小有要求,就不要用 web 相关的技术做桌面端。
    如果想跨平台,就用 web 相关技术做桌面端。
    如果开发时间有要求,就要需要用成熟的技术,ReactNative-Windows 、WinUI 3 、Blazor 等,有的技术很新,有的很少人用,中文文档基本没有,英文文档也不够全,遇到难题估计要靠自己踩坑。
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1012 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 113ms · UTC 20:08 · PVG 04:08 · LAX 13:08 · JFK 16:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.