(原創)【MAUI】在窗口(頁面)關閉後獲取其返回值
一、前言
作為一名 Winform 和 WPF 的老用戶,沒想到 MAUI 上變化那麼大。
就像傳統的窗口,我彈出一個模式窗口,關閉窗口後是可以獲取到窗口的返回值的,即: DialogResult。後續根據返回值的不同,來執行不同的操作。
但是在 MAUI 這裡,沒有了「窗口」,只剩下了「頁面」,新頁面的顯示是通過「導航」的方式去實現的,沒有了 ShowDialog(),自然也沒有了 DialogResult。
但是獲取頁面關閉後不同的返回值,進而執行不同的操作,是很必要的。
既然官方沒有提供,我們就自己動手,豐衣足食。
相信看完的你,一定會有所收穫!
//www.cnblogs.com/lesliexin/p/16588060.html
二、實現原理
本次實現的關鍵點在於:怎麼確定頁面關閉了?
因為在 MAUI 中,頁面是以「導航」的方式呈現的,沒有辦法直接判斷子頁面是否已經關閉。
所以我們需要用到主頁面的 NavigationTo 事件(Appearing 事件也可以實現類似效果,不過 Appearing 被觸發的時機太多,所以這裡採用 Navigation 事件)。
具體的實現過程如下。
三、程式碼實現
(一)創建 MAUI 程式。
按照VS提示創建即可,此處不再贅述。

(二)子頁面
我們添加一個新頁面,名稱保持默認。

1,設計器程式碼
我們添加一個標籤標、和「確定」、「取消」兩個按鈕。

2,後台程式碼
我們添加一個bool屬性:IsOK,用來標識是點擊了「確定」按鈕還是「取消」按鈕。
點擊「確定」按鈕和「取消」按鈕時,先設置屬性 IsOK,然後關閉當前頁面。
因為是導航的方式,所以與常規的窗口不同,頁面是能響應「返回鍵」的(當然也可以使用模式導航的方式來不顯示返回鍵)。
所以我們需要重寫頁面的 OnBackButtonPressed 方法。
簡單起見,我們在點擊「返回鍵」時,將屬性 IsOK 設置為 False。

(三)主頁面
1,設計器
修改設計器程式碼,添加一個標籤和一個按鈕。

2,後台程式碼
首先,我們定義一個全局的子頁面變數,因為要在其它地方用到。
接著,在點擊按鈕時,我們彈出子頁面。
最後,我們實現 NavigationTo 事件,在觸發時,先判斷子頁面是否為 Null,不為 Null 則獲取其返回值,根據其屬性 IsOK 的不同值,顯示不同的資訊。

四、效果演示
我們編譯運行程式,可以看到和 Winform/Wpf 中的 ShowDialog 效果類似,可以在新窗口(頁面)關閉後獲取不其返回值,進而根據不同的返回值執行不同的操作。
1,Windows 端效果:

2,Android 端效果:

五、源程式碼下載
//files.cnblogs.com/files/lesliexin/MauiDemoDialogResult.7z
六、總結
每個框架都有屬於自己的邏輯和思路,順著框架的邏輯和思路去編寫程式碼是最合適的。
但是像我這種一直使用 Winform 和 Wpf 的人,思考邏輯也是 Winform 和 Wpf 那套,思路的轉變有些困難,導致在接受新框架時格外費力。
所以也就會有很多「野路子」的實現,哈哈哈哈。
-【END】-
