V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imlinhanchao
V2EX  ›  程序员

UWP 如何實現按需載入 XAML 界面

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

    最近因公司業務需要,需要將現有 Win32 軟體遷移至 UWP 平臺。因爲是硬體公司,其軟體涉及多個設備,不同設備均有其特定的界面。

    若發佈的軟體包直接包含所有設備,則會導致軟體包過大。因此,產品 PM 提出要能做到當識別到用戶相關設備時,才通過下載或額外安裝的方式,使主體軟體框架可以支援操作對應設備。

    從目前找到的資料看,這種方式有點類似 UWP 的可選包。但實際實驗發現,只能支持將後端邏輯代碼分離,而無法將 XAML 界面分離至可選包。

    因此,在此請教各位大佬,是否有實現過類似功能,協助給予一些方向。感謝!

    第 1 条附言  ·  287 天前

    问题已解决,最后发现可选包是可行的。整理了做法文章:
    https://my.hancel.org/2021/03/08/uwp-optional-package.html

    8 条回复    2021-02-25 20:53:12 +08:00
    encro
        1
    encro  
       335 天前
    xaml 界面能有多大呢?
    一般来说是 res 资源图片之类比较大。

    正确做法:将图片等资源放在网络上下载。
    goobai
        2
    goobai  
       335 天前 via Android
    没学过反射吗?
    janus77
        3
    janus77  
       335 天前
    支持 uwp 的系统应该不多吧,全部界面穷举出来能有多少?你的包体积真的会影响很大吗
    另一个思路是直接打多个包,按需下载使用
    ly841000
        4
    ly841000  
       335 天前
    做成不同的 dll, 按需加载
    imlinhanchao
        5
    imlinhanchao  
    OP
       334 天前
    @ly841000 UWP 不能動態載入 dll 。

    @janus77 多打個包是指什麽?

    @encro 還有一方面的考慮是有新增設備資源無需再去更新主程序框架,畢竟多個單位在維護。
    ysc3839
        6
    ysc3839  
       334 天前 via Android
    用 Windows::UI::Xaml::Markup::XamlReader::Load 可以动态载入纯文本的 XAML 代码。不过代价是界面未经过编译,容易被复制。

    或者考虑用 HTML 做界面?印象中 UWP 支持 HTML 界面。
    cjw1115
        7
    cjw1115  
       334 天前
    看描述你们是要搞 DCHU, app 要做成 HSA....

    主页面放一个 frame, 根据不同的设备型号 new 不同的 xaml page 作为 content 放进去, 就这思路。XAML+CS 很小的。
    至于你的各种类型的资源比如 video,可以做成 optional package, 单独打包上传商店。

    其次 XAML page 也是可以放在 universal DLL 里面的,实测过。
    imlinhanchao
        8
    imlinhanchao  
    OP
       334 天前
    @cjw1115 有辦法引用可選包内的資源嗎?有沒有實例或文檔可以參考?我找到的基本上都是引用 Class 。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4306 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:56 · PVG 16:56 · LAX 00:56 · JFK 03:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.