
示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载本篇技术指南以 Windows-universal-samples 仓库中 archived/MessageDialog/README.md 为主线深入讲解 UWP 应用中Windows.UI.Popups.MessageDialog的完整用法如何显示必须由用户确认的紧急消息、如何为对话框添加命令command并绑定动作、如何设置默认命令与取消命令以及如何通过完成回调completed callback获取用户选择结果。读完本文你将掌握 MessageDialog 从创建、配置到异步展示的完整实战方案并能直接对照仓库中的 JavaScript 示例代码进行验证与扩展。MessageDialog 是什么适用场景与 API 定位根据示例文档的说明MessageDialog类位于Windows.UI.Popups命名空间它用于向用户呈现两类典型的交互诉求必须确认后继续的紧急消息例如未找到网络连接试用期已结束这类阻断性提示用户必须做出响应才能继续操作必须回答的紧急问题例如检测到新更新是否立即安装这类需要用户在对话框内做出二选一或多选一决策的问题。这与ContentDialog这类可承载任意 XAML 内容、用于常规页面内交互的对话框定位不同。MessageDialog 更加轻量聚焦于消息 命令列表 结果回调非常适合无需复杂 UI 的确认类交互。示例文档在 archived/MessageDialog/README.md 中明确说明了这一核心用途并给出了系统要求客户端 Windows 10、服务器 Windows Server 2016 Technical Preview、手机 Windows 10。示例总体结构四个实战场景本示例是一个 JavaScriptWinJS版 UWP 应用解决方案与工程文件位于 archived/MessageDialog/js/MessageDialogSample.sln 与 archived/MessageDialog/js/MessageDialogSample.jsproj。示例将全部演示内容组织为四个独立场景每个场景由一对 HTML 页面与 JS 脚本组成场景清单定义在 archived/MessageDialog/js/js/sample-configuration.js场景页面与脚本核心演示点Use custom commandshtml/customcommand.html js/customcommand.js自定义命令、命令回调、默认命令Use default close commandhtml/defaultclosecommand.html js/defaultclosecommand.js无自定义命令时自动出现的默认 Close 命令Use completed callbackhtml/completedcallback.html js/completedcallback.js通过showAsync().done()完成回调代替委托获取结果Use cancel commandhtml/cancelcommand.html js/cancelcommand.js设置 ESC 键触发的取消命令、读取选中命令的 label每个 HTML 页面中都放置了一个 Launch Dialog 按钮并在ready回调中为按钮绑定对应的点击处理函数例如 html/cancelcommand.html 中的按钮idcancelCommand会触发cancelCommand_Click。这种一页一场景的组织方式便于单独观察每种 MessageDialog 配置行为。构建与运行示例示例文档给出了标准的构建与运行流程本仓库为只读镜像以下均为本地查看与构建指引构建步骤若以 ZIP 方式下载了示例集务必解压整个归档文件而不仅是单个示例文件夹因为工程依赖仓库根目录下 SharedContent 中的共享资源如 WinJS 库、默认页面与媒体文件这一点可从 MessageDialogSample.jsproj 中以..\..\..\SharedContent\...形式引入的Content项看出启动 Microsoft Visual Studio 2017选择File Open Project/Solution打开本示例的解决方案文件 archived/MessageDialog/js/MessageDialogSample.sln按CtrlShiftB或选择Build Build Solution编译。运行步骤仅部署选择Build Deploy Solution部署并运行将工程设为启动项目后按F5启动调试。从工程文件看该示例面向 UAPUniversal App PlatformMessageDialogSample.jsproj 中TargetPlatformVersion与TargetPlatformMinVersion均为10.0.18362.0支持 Debug/Release 下的 Any CPU、ARM、x64、x86 多种配置。应用清单 archived/MessageDialog/js/Package.appxmanifest 声明了TargetDeviceFamily NameWindows.UniversalMinVersion10.0.10240.0MaxVersionTested10.0.18362.0以及唯一的internetClient能力说明该示例本身无需额外系统权限即可运行。实战一使用自定义命令customcommand这是最基础的 MessageDialog 用法创建对话框、追加带回调的自定义命令、指定默认命令索引并展示。完整实现见 js/customcommand.jsfunction customCommand_Click() { // 创建消息对话框并设置内容与标题 var msg new Windows.UI.Popups.MessageDialog( New updates have been found for this program. Would you like to install the new updates?, Updates available); // 添加命令并设置各自的命令处理函数 msg.commands.append(new Windows.UI.Popups.UICommand(Dont install, function (command) { WinJS.log WinJS.log(The Dont install command has been selected., sample, status); })); msg.commands.append(new Windows.UI.Popups.UICommand(Install updates, function (command) { WinJS.log WinJS.log(The Install updates command has been selected., sample, status); })); // 设置默认命令索引 1 对应 Install updates msg.defaultCommandIndex 1; // 展示对话框异步不阻塞 UI 线程 msg.showAsync(); }要点拆解构造函数new MessageDialog(content, title)content为显示给用户的正文title为可选的标题文本命令集合msg.commands是一个IVectorUICommand通过append依次追加命令命令的显示顺序即追加顺序UICommand 构造new UICommand(label, invokedCallback)第一个参数是按钮上显示的文本第二个参数是点击该按钮后执行的函数默认命令defaultCommandIndex指定高亮默认聚焦的命令索引从 0 开始计数。此场景中Install updates索引 1被设为默认选择异步展示showAsync()返回一个异步操作对话框显示期间 UI 线程不会被阻塞。实战二使用默认关闭命令defaultclosecommand如果调用方不需要任何操作选项只希望用户确认并关闭对话框可以不追加任何自定义命令——MessageDialog 会自动提供一个默认的 Close 命令。完整实现见 js/defaultclosecommand.jsfunction defaultCloseCommand_Click() { // 只设置内容不添加任何自定义命令因此对话框自动获得默认 Close 命令 var msg new Windows.UI.Popups.MessageDialog(Youve exceeded your trial period.); // 展示对话框完成回调在对话框关闭后触发 msg.showAsync().done(function () { WinJS.log WinJS.log(The dialog has now been closed., samples, status); }); }该场景验证了两个重要行为默认命令的自动生成当commands集合为空时系统会自动注入一个标签为 Close 的命令确保用户永远有途径关闭对话框这也解释了为什么showAsync的完成回调总是会被执行完成回调showAsync().done(fn)中的fn会在对话框关闭后统一触发无论用户点击的是哪个命令。这种零命令模式适合纯提示场景例如本示例中的试用期已结束消息。实战三使用完成回调completedcallback第二个场景展示了不依赖委托invoked callback而是通过showAsync()的完成回调统一处理结果的写法同时演示了 UICommand 的第三个参数id。完整实现见 js/completedcallback.jsfunction completedCallback_Click() { var msg new Windows.UI.Popups.MessageDialog( New updates have been found for this program. Would you like to install the new updates?, Updates available); // 添加命令并设置 CommandId第三个参数 msg.commands.append(new Windows.UI.Popups.UICommand(Install updates, null, 1)); msg.commands.append(new Windows.UI.Popups.UICommand(Dont install, null, 2)); // 设置默认命令索引 2 对应 Dont install msg.defaultCommandIndex 2; // 通过完成回调获取用户选中的命令 msg.showAsync().done(function (command) { if (command) { WinJS.log WinJS.log( The command.label ( command.id ) command has been selected., sample, status); } }); }与场景一的差异与关键点UICommand 三参构造new UICommand(label, invoked, id)——第二个参数传null表示不设置委托回调第三个参数id是开发者自定义的命令标识数值用于在完成回调中区分命令完成回调参数showAsync().done(function (command) {...})中的command参数即用户选中的 UICommand 对象可直接读取其label文本与id标识两种回调机制对比委托回调场景一在命令被点击的瞬间执行完成回调场景三在对话框整体关闭后统一触发。当逻辑需要拿到用户选择后再统一处理时完成回调是更合适的选择defaultCommandIndex 的值取决于命令追加顺序本场景中Dont install是索引 2第二个追加因此defaultCommandIndex 2使不安装成为默认高亮项——注意索引是追加序而非命令 id。实战四使用取消命令cancelcommand最后一个场景演示 MessageDialog 的键盘交互能力通过cancelCommandIndex指定按下 ESC取消键时触发的命令同时展示如何在回调中读取所选命令的 label。完整实现见 js/cancelcommand.jsfunction cancelCommand_Click() { var msg new Windows.UI.Popups.MessageDialog(No internet connection has been found.); // 添加命令并设置命令处理函数 msg.commands.append(new Windows.UI.Popups.UICommand(Try again, commandInvokedHandler)); msg.commands.append(new Windows.UI.Popups.UICommand(Close, commandInvokedHandler)); // 设置默认命令索引 0 对应 Try again msg.defaultCommandIndex 0; // 设置 ESC 键触发的命令索引 1 对应 Close msg.cancelCommandIndex 1; // 展示对话框 msg.showAsync(); } function commandInvokedHandler(command) { // command.label 即用户所选命令的文本 WinJS.log WinJS.log(The command.label command has been selected., sample, status); }要点defaultCommandIndex与cancelCommandIndex是相互独立的两个索引前者决定对话框默认聚焦/高亮的命令回车通常触发它后者决定按下 ESC 键时执行哪个命令。本场景中用户按 ESC 将触发 Close 而非默认的 Try again模拟用户放弃重试、直接关闭的交互语义委托回调可复用两个命令共用同一个commandInvokedHandler回调参数command.label可区分具体是哪个命令被触发——这是使用委托时推荐的做法避免为每个命令重复编写处理逻辑从场景结构看defaultCommandIndex、cancelCommandIndex与命令追加顺序共同构成了 MessageDialog 的完整键盘/焦点行为配置。MessageDialog 核心 API 速查综合四个场景将示例中用到的核心 API 整理如下成员均来自Windows.UI.Popups命名空间API用途示例中的取值new MessageDialog(content)创建仅含正文的对话框No internet connection has been found.new MessageDialog(content, title)创建带标题的对话框正文 Updates availablemsg.commands.append(uiCommand)按追加顺序添加命令2 个以内自定义命令new UICommand(label)创建仅含文本的命令Closenew UICommand(label, invoked)创建带委托回调的命令Try again 回调函数new UICommand(label, invoked, id)创建带回调与数值 id 的命令null id1/2msg.defaultCommandIndex默认命令索引从 0 起0、1、2msg.cancelCommandIndexESC 键触发的命令索引1msg.showAsync()异步展示对话框各场景统一调用msg.showAsync().done(fn)展示并在关闭后执行完成回调回调参数为选中命令对象实践建议命令数量不宜过多建议 23 个保持紧急提示的可读性委托回调适合命令即动作的简单场景完成回调适合拿到选择结果后统一分支处理的场景若只需用户确认可完全不添加命令依赖自动生成的默认 Close 命令默认命令应设置为最推荐的安全选项取消命令应设置为可放弃当前操作的选项如本示例的 Close。从源码结构看实现细节与验证路径在仓库中验证上述结论的最直接路径是逐文件对照场景注册与页面映射js/sample-configuration.js 定义了四个场景的 url 与标题是理解示例导航结构的入口页面与脚本一一对应html/customcommand.html、html/defaultclosecommand.html、html/completedcallback.html、html/cancelcommand.html 各自引用对应的js/xxx.js并放置 Launch Dialog 按钮工程与清单MessageDialogSample.jsproj 展示了共享依赖SharedContent 下的 WinJS 库、默认页、图片如何以Link方式打包进应用Package.appxmanifest 定义了Windows.Universal目标设备族、显示名与能力示例整体说明与构建运行流程见 archived/MessageDialog/README.md。需要说明的是本示例在仓库中位于archived目录历史归档示例其技术主题——使用Windows.UI.Popups.MessageDialog展示消息、配置命令与默认按钮——与当前活跃的 UWP 示例保持同一套 API 语义作为 MessageDialog 的入门参考依然完整可用。读者可在此基础上结合现代 UWP 开发中更常用的ContentDialog做进一步对比实践。赞分享示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载相关推荐Windows-universal-samples 之 MessageDialog 示例UWP 消息对话框的命令定制、默认按钮与回调机制全解析Windows universal samples 之 MessageDialog 示例UWP 消息对话框的命令定制、默认按钮与回调机制全解析 本文以 Win示例工程Windows-universal-samples 的 WebAuthenticationBroker 示例UWP 应用集成 OAuth 身份认证实战指南Windows universal samples 的 WebAuthenticationBroker 示例UWP 应用集成 OAuth 身份认证实战指南 本示例工程Windows-universal-samples 之 USSD 协议示例UWP 移动宽带会话交互实战指南Windows universal samples 之 USSD 协议示例UWP 移动宽带会话交互实战指南 本指南以 Windows universal sa示例工程上一篇NATS.Net消费JetStream消息的3种方式Next、Fetch与Consume对比选型下一篇如何快速导入Excel和CSV数据到Tabulator交互式表格终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考