显示弹出窗口

显示警报、要求用户做出选择或显示提示是常见的 UI 任务。 .NET 多平台应用 UI (.NET MAUI) 在 Page 类上有三种方法,用于通过弹出窗口与用户交互: DisplayAlertDisplayActionSheet以及 DisplayPromptAsync。 弹出窗口在每个平台上都呈现有本机控件。

显示警报

所有受 .NET MAUI 支持的平台都有一个弹出窗口,提醒用户或询问这些平台的简单问题。 若要显示警报,请使用 DisplayAlert 任何 Page方法。 以下示例向用户显示一条简单消息:

await DisplayAlert("Alert", "You have been alerted", "OK");

Screenshot of an alert dialog with one button.

关闭警报后,用户将继续与应用交互。

注意

在 Android 上,可以通过点击警报外部的页面来消除警报。 在桌面平台上,可以使用转义密钥消除警报。

DisplayAlert 方法还可以通过显示两个按钮并返回 bool 来捕获用户的响应。 若要从警报获取响应,请为按钮和 await 方法提供文本:

bool answer = await DisplayAlert("Question?", "Would you like to play a game", "Yes", "No");
Debug.WriteLine("Answer: " + answer);

Screenshot of an alert dialog with two buttons.

用户选择其中一个选项后,响应将作为一个 bool返回。

该方法 DisplayAlert 还具有接受参数 FlowDirection 的重载,该参数指定 UI 元素在警报中流动的方向。 有关流动方向的详细信息,请参阅从右到左本地化

警告

默认情况下,在 Windows 上,当警报显示在警报后面的页面上定义的任何访问密钥时,仍可以激活。 有关详细信息,请参阅 Windows 上的 VisualElement 访问密钥。

指导用户完成任务

操作表向用户提供一组有关如何继续执行任务的替代方法。 若要显示操作表,请使用 DisplayActionSheet 任意 Page操作表的方法,将消息和按钮标签作为字符串传递:

string action = await DisplayActionSheet("ActionSheet: Send to?", "Cancel", null, "Email", "Twitter", "Facebook");
Debug.WriteLine("Action: " + action);

Screenshot of an action sheet dialog.

用户点击其中一个按钮后,按钮标签将作为一个 string返回。

注意

可以通过点击操作表外部的页面,在触摸平台上和 Mac Catalyst 上消除操作工作表。 在 Windows 上,可以使用转义键消除操作工作表,然后单击操作表外部的页面。

操作表还支持销毁按钮,该按钮是表示破坏性行为的按钮。 销毁按钮可以指定为方法的第三个字符串参数 DisplayActionSheet ,也可以保留 null。 以下示例指定销毁按钮:

async void OnActionSheetCancelDeleteClicked(object sender, EventArgs e)
{
  string action = await DisplayActionSheet("ActionSheet: SavePhoto?", "Cancel", "Delete", "Photo Roll", "Email");
  Debug.WriteLine("Action: " + action);
}

Screenshot of an action sheet with a destroy button.

注意

在 iOS 上,销毁按钮呈现方式与操作工作表中的其他按钮不同。

该方法 DisplayActionSheet 还具有一个重载,该重载接受一个 FlowDirection 参数,该参数指定 UI 元素在操作表中流动的方向。 有关流动方向的详细信息,请参阅从右到左本地化

显示提示

若要显示提示,请调用 DisplayPromptAsync 任意 Page项,将标题和消息作为 string 参数传递:

string result = await DisplayPromptAsync("Question 1", "What's your name?");

Screenshot of a prompt.

如果点击了“确定”按钮,则输入的响应将返回为一个 string。 如果点击了“取消”按钮, null 则返回。

注意

在 Android 上,可以通过点击警报外部的页面来消除提示。 在桌面平台上,可以使用转义键消除提示。

方法的完整参数列表 DisplayPromptAsync 为:

  • title类型 string为要显示在提示中的标题。
  • message,类型 string为提示中显示的消息。
  • accept类型 string为接受按钮的文本。 这是一个可选参数,其默认值为 OK。
  • cancel,类型 string为取消按钮的文本。 这是一个可选参数,其默认值为 Cancel。
  • placeholder类型 string,是提示中显示的占位符文本。 这是一个可选参数,其默认值为 null.
  • maxLength类型 int为用户响应的最大长度。 这是一个可选参数,其默认值为 -1。
  • keyboard类型 Keyboard,是用于用户响应的键盘类型。 这是一个可选参数,其默认值为 Keyboard.Default.
  • initialValue类型 string,是一个预定义的响应,将显示,并且可以对其进行编辑。 这是一个可选参数,其默认值为空 string

以下示例演示如何设置一些可选参数:

string result = await DisplayPromptAsync("Question 2", "What's 5 + 5?", initialValue: "10", maxLength: 2, keyboard: Keyboard.Numeric);

此代码显示预定义的响应 10,将可输入的字符数限制为 2,并显示用户输入的数字键盘:

Screenshot of an optional prompt.

警告

默认情况下,在 Windows 上,当提示显示任何在提示后面的页面上定义的访问密钥时,仍可以激活。 有关详细信息,请参阅 Windows 上的 VisualElement 访问密钥。

以弹出窗口的形式显示页面

.NET MAUI 支持模式页面导航。 模式页面鼓励用户完成在任务完成或取消之前无法导航的自包含任务。 例如,若要将窗体显示为弹出窗口,要求用户输入多个数据片段,请创建一个 ContentPage 包含窗体 UI 的窗体,然后将其作为模式页面推送到导航堆栈。 有关详细信息,请参阅执行模式导航