2025澳门开彩结果历史记录-2025澳门开彩结果-2025澳门开彩查询记录-2025澳门聚宝盆-2025澳门九点半一肖一码-2025澳门精准资料免费全览

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Blazor Hybrid 實戰體驗:那些你可能沒預料到的坑

freeflydom
2025年1月17日 10:21 本文熱度 365

文件拖放事件的局限#

Blazor Hybrid 的運行環境是 WebView,這導致了在處理文件拖放時出現了一些限制。在傳統桌面應用中(如 WinForms 或 WPF),開發者可以直接捕獲拖放事件,并獲得文件的完整路徑。但在 Blazor 中,拖放事件只能像瀏覽器中一樣處理,意味著我們只能獲得上傳文件的流,而無法獲取文件的實際路徑。

這對于那些需要直接訪問文件路徑的功能(如Clipify中把視頻拖進去處理)帶來了很大的不便。

冗余代碼(不是)#

看了項目代碼的同學可能會發現,FormMain.cs里還有處理拖放事件的代碼,不過實際上并沒有生效。

// 處理拖動進入事件,檢測是否為文件
private void blazorWebView1_DragEnter(object sender, DragEventArgs e) {
  Console.WriteLine("drag enter");
  if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
    // 改變鼠標圖標,表示可以拖放
    e.Effect = DragDropEffects.Copy;
  }
  else {
    e.Effect = DragDropEffects.None;
  }
}
// 處理拖放事件,獲取文件路徑
private void blazorWebView1_DragDrop(object sender, DragEventArgs e) {
  Console.WriteLine("drag drop");
  if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
    var files = (string[]?)e.Data.GetData(DataFormats.FileDrop);
    // 這里只處理單個文件,當然你也可以處理多個文件
    if (files?.Length > 0) {
      var filePath = files[0]; // 獲取拖放的文件路徑
      MessageBox.Show($"文件路徑: {filePath}");
      // 在這里你可以將文件路徑傳遞給 Blazor 或其他處理邏輯
    }
  }
}
// 處理 DragOver 事件,防止系統默認行為
private void blazorWebView1_DragOver(object sender, DragEventArgs e) {
  if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
    e.Effect = DragDropEffects.Copy; // 明確允許拖放文件
  }
  else {
    e.Effect = DragDropEffects.None;
  }
}

?解決方案

目前的解決辦法有限,根據查找到的資料和我自己的探索,有以下幾種:

  1. 在需要拖放的時候,使用一個WinForms原生控件覆蓋webview

  2. 使用hook技術,攔截webview的拖放事件

  3. 重寫微軟提個的這個 Blazor Webview 控件,自己實現 WndProc 方法

第3種方法的代碼大概是這樣(未驗證)

public class CustomBlazorWebView : BlazorWebView {
  protected override void WndProc(ref Message m) {
    const int WM_DROPFILES = 0x233; // 拖放文件消息
    if (m.Msg == WM_DROPFILES) {
      // 處理文件拖放邏輯
      // 你可以在這里調用你的拖放事件處理邏輯
      // 阻止消息傳遞,避免系統默認處理文件
      return;
    }
    base.WndProc(ref m);
  }
}

PS:我嫌麻煩就還沒去折騰實現這個拖放功能,目前只做了打開對話框選擇文件。

社區反饋#

同樣的問題我在 Github issues 和 Stack Overflow 之類的平臺也有看到很多人提出,不過看起來微軟并不想解決這些問題。

相關鏈接:

桌面應用體驗差異#

Blazor Hybrid 盡管以桌面應用的形式運行,但表現更接近于網頁應用。

瀏覽器的快捷鍵#

一個明顯的例子是,在 WebView 中按下 F5 鍵時,頁面會像瀏覽器一樣刷新,這種行為顯然不符合傳統桌面軟件的用戶體驗。

在類似的技術中,如 Electron,也存在類似的局限。但不同的是,Electron 提供了更多對瀏覽器行為的控制手段,可以阻止或重定義這些行為,而 Blazor Hybrid 目前則沒有這些更細粒度的控制能力。

從桌面應用的角度來看,用戶希望獲得一致且原生的操作體驗,因此這些細微的差異可能會影響開發者對 Blazor Hybrid 應用的期望。

窗口大小調整的表現

在使用 Blazor Hybrid 時,我還注意到窗口大小調整的流暢度問題。相比起原生的桌面應用,Blazor Hybrid 的表現不盡如人意。當用戶調整窗口大小時,界面偶爾會出現黑邊或畫面撕裂的現象。

這種問題不僅在 Blazor Hybrid 中出現,實際上,在瀏覽器(chrome)和 Electron 應用(QQ)中,我也觀察到類似的問題。

為了更深入地理解這個現象,我還測試了 C++ 原生應用,結果發現原生應用在調整窗口大小時相對來說更流暢,沒有出現黑邊或撕裂的問題。

我猜測造成這種差異的原因可能在于,Blazor Hybrid 和 Electron 依賴 WebView 作為渲染引擎,而 WebView 的渲染機制在處理窗口大小調整時不如原生 UI 渲染引擎高效。

小結#

Blazor Hybrid 是一個非常有潛力的技術,它讓 C# 開發者能夠輕松地構建跨平臺桌面應用。

然而,在使用過程中,我發現了一些需要關注的問題,尤其是在拖放事件、桌面應用行為一致性和窗口大小調整表現上。

轉自https://www.cnblogs.com/deali/p/18458357


該文章在 2025/1/17 10:23:25 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 新澳2025最新资料大全 | 管家婆期期四肖四码中特管家 | 2025澳门精准四不像论坛 | 澳门精准四肖八码精准资料下载 | 澳门传真一澳门一传真 | 118彩色厍图库 | 澳门惠泽社群高手论坛 | 2025新澳免费资料大全 | 下载626969网站1 | 澳彩王中王资料免费看2025年澳门正版资料大全完整版 | 管家婆一票一码100正确 | 2025年新澳门天天开彩免费资料 | 新澳精准资料期期精准 | 彩库宝典安卓版本 | 玄女心经2在线播放免费不卡在线观看 | 天下彩(9944cc)天下彩资料 | 新澳门历史记录查询表 | 2025年澳门正版资料大全免费 | 118彩色厍图片 | 小鱼儿域名主页请记住1961c0㎜ | 2025年澳门彩今晚开奖号码 | 2025澳门免费精准资料赤兔版 | 澳门一肖一码一必中一肖 | 香港免费公开资料大全 | 澳门一肖一码必中一肖,香港最难 | 新澳门六开彩资料大全 | 二四六香港管家婆期期准资料大全 | 四肖四码期期准正版白小姐免费 | 今天晚上澳门买什么特买呀 | 金牛网155755水心论坛 | 澳门2025财政年度施政亮点 | 今天晚上澳门开什么 | 246天天天彩天好彩资料大全玄机金牛版 | 王中王精选三肖资料大全 | 2025澳门一肖一码100%中奖 | 三肖三肖期期淮 | 2025澳门正版资料免费 | 2025年香港6合资料大全权威新闻 | 今晚澳门必中一肖 | 2025全年新澳门与香港正版免费资料资本 | 王中王资料大全料大全一精准王 |