.NET Maui中能否在函数中途导航页面并暂停至页面关闭?
.NET MAUI 实现模态对话框暂停执行+返回值逻辑
完全可行,.NET MAUI里可以通过异步模态导航+页面传值实现和WinForms ShowDialog一致的逻辑,具体做法如下:
1. 改造目标页面(对应原frmProd)
给MAUI ContentPage添加返回结果属性,并在按钮事件中处理关闭逻辑:
Public Class frmProdPage Inherits ContentPage ' 存储对话框返回结果,True=确认,False=取消,Nothing=未操作 Public Property DialogResult As Boolean? Public Sub New() InitializeComponent() ' 绑定确认/取消按钮点击事件 AddHandler btnOK.Clicked, AddressOf btnOK_Clicked AddHandler btnCancel.Clicked, AddressOf btnCancel_Clicked End Sub Private Async Sub btnOK_Clicked(sender As Object, e As EventArgs) Me.DialogResult = True ' 关闭模态页面 Await Navigation.PopModalAsync() End Sub Private Async Sub btnCancel_Clicked(sender As Object, e As EventArgs) Me.DialogResult = False Await Navigation.PopModalAsync() End Sub End Class
2. 调用方异步改造
将原同步方法改为Async方法,通过Await等待模态页面关闭,之后获取返回值:
' 注意:方法必须标记为Async,返回类型如果是Sub就保持,是Function则改为Task/Task(Of T) Private Async Sub OriginalTriggerMethod() ' 执行到此处暂停,打开模态页面 Dim prodPage = New frmProdPage() Await Navigation.PushModalAsync(prodPage) ' 模态页面关闭后,代码才会继续执行到这里 If prodPage.DialogResult = True Then ' 原代码中ShowDialog=OK后的业务逻辑 ' 示例:获取页面中的输入数据 Dim selectedProd = prodPage.txtProductName.Text ' 后续处理... Else ' 取消后的逻辑 End If End Sub
3. 优化细节
- 如果需要给模态页面传递初始化数据,可以通过构造函数或属性实现:
' 在frmProdPage中添加带参数的构造函数 Public Sub New(initialProductId As String) InitializeComponent() txtProductId.Text = initialProductId ' 其他初始化逻辑... End Sub ' 调用时传入数据 Dim prodPage = New frmProdPage("PROD001") - 若要隐藏模态页面的导航栏,让风格更接近WinForms对话框:
Dim modalContainer = New NavigationPage(New frmProdPage()) modalContainer.BarVisibility = NavigationBarVisibility.Never Await Navigation.PushModalAsync(modalContainer)
内容的提问来源于stack exchange,提问作者Yanyan
相关产品推荐
相关产品推荐

