示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载本指南以仓库中归档的 Touch Keyboard 示例 为线索系统讲解 UWP 应用中触控键盘输入面板 InputPane的默认显示规则、Showing/Hiding事件订阅以及TryShow()/TryHide()编程控制方法。通过阅读本文你将掌握触控键盘何时自动弹出、如何感知其显隐、如何主动接管显隐时机并能直接复刻该示例的三个核心场景。示例概述与场景总览Touch Keyboard 示例展示了 UWP 应用中触控键盘的两种核心能力默认显示行为与行为的自定义。官方描述为Shows both the default display behavior of the touch keyboard and how that behavior can be customized in a UWP app.从 SampleConfiguration.cpp 的场景注册表可以看到该示例由三个场景构成场景标题对应页面类核心关注点Display touch keyboard automaticallySDKTemplate.Scenario1_Launch默认自动显示行为Listen for Show/Hide eventsSDKTemplate.Scenario2_ShowHideEvents显隐事件订阅Programmatically Show/Hide the touch keyboardSDKTemplate.Scenario3_ShowHideMethods编程显隐控制Platform::ArrayScenario^ MainPage::scenariosInner ref new Platform::ArrayScenario { { Display touch keyboard automatically, SDKTemplate.Scenario1_Launch }, { Listen for Show/Hide events, SDKTemplate.Scenario2_ShowHideEvents }, { Programmatically Show/Hide\nthe touch keyboard, SDKTemplate.Scenario3_ShowHideMethods } };三个场景分别对应 README 中列出的四条能力XAML 文本控件TextBox、RichTextBox、PasswordBox默认显示触控键盘从 XAML 文本控件派生的控件默认同样显示触控键盘应用可以订阅触控键盘显示/隐藏的事件应用可以主动请求显示或隐藏触控键盘。系统要求依据 README 中 System requirements 一节本示例的运行环境要求为客户端ClientWindows 10服务器ServerWindows Server 2016 Technical Preview手机PhoneWindows 10但注意KeyboardEnabledTextBox在手机端不受支持详见下文说明另外需要强调两点前提Windows universal samples 需要Visual Studio进行编译、需要Windows 10才能运行示例中的 C 版本依赖 Windows 10 通用 SDK其 Package.appxmanifest 中声明了TargetDeviceFamily NameWindows.Universal MinVersion10.0.10240.0 MaxVersionTested10.0.18362.0即最低适配 Windows 10 10240RTM 版本实测兼容到 18362Windows 10 1903。构建与运行示例按照 README 的 Build the sample 与 Run the sample 两节操作步骤如下构建启动 Visual Studio选择File→Open→Project/Solution进入解压后示例目录中对应语言C / C# / JavaScript的子目录双击.sln解决方案文件本仓库中 C 版为 TouchKeyboard.sln按CtrlShiftB或选择Build→Build Solution完成编译。运行仅部署选择Build→Deploy Solution部署并调试运行按F5或选择Debug→Start Debugging不调试直接运行按CtrlF5或选择Debug→Start Without Debugging。场景一默认显示行为Scenario 1场景一的 XAML 页面位于 Scenario1_Launch.xaml对应后台代码 Scenario1_Launch.xaml.cpp仅完成页面初始化说明默认行为无需任何代码介入。页面中放置了三类控件来演示默认行为原生TextBox提示文字 The keyboard displays when you tap here.自定义控件local:CustomTextBox——从TextBox派生的控件证明派生自文本控件的类型同样继承默认触控键盘行为一个普通Button用于演示点击非文本区域时键盘隐藏。XAML 中的说明文字明确了默认规则当触摸或触笔将焦点设置到 XAML 文本控件如 TextBox、RichTextBox、PasswordBox或从文本控件派生的控件时触控键盘会显示。自动显示的两条硬性条件页面中特别以加粗列表形式给出了自动显示的前提条件这同样是 README 中 Note 段的核心内容未激活硬件键盘且满足以下任一条件2a. 设备处于平板模式Tablet mode或2b. 在Settings → Devices → Typing中开启了 Show the touch keyboard when not in tablet mode and theres no keyboard attached非平板模式下且无外接键盘时显示触控键盘。换言之如果外接硬件键盘处于激活状态或设备处于桌面模式且上述设置项为 Off触控键盘不会自动弹出。这是开发者在真机调试时最常见的键盘不出来原因属于系统级策略而非应用缺陷。场景二监听 Showing / Hiding 事件Scenario 2场景二展示如何感知触控键盘的显隐状态。页面 Scenario2_ShowHideEvents.xaml 包含一个用于唤起键盘的TextBox、一个普通按钮以及一个文本Runx:NameLastInputPaneEventRun用于显示最近一次事件。后台逻辑 Scenario2_ShowHideEvents.xaml.cpp 完整演示了InputPane事件的生命周期管理void Scenario2_ShowHideEvents::OnNavigatedTo(NavigationEventArgs^ e) { auto inputPane InputPane::GetForCurrentView(); // Subscribe to Showing/Hiding events showingEventToken inputPane-Showing ref new TypedEventHandlerInputPane^, InputPaneVisibilityEventArgs^(this, Scenario2_ShowHideEvents::OnShowing); hidingEventToken inputPane-Hiding ref new TypedEventHandlerInputPane^, InputPaneVisibilityEventArgs^(this, Scenario2_ShowHideEvents::OnHiding); } void Scenario2_ShowHideEvents::OnNavigatedFrom(NavigationEventArgs^ e) { auto inputPane Windows::UI::ViewManagement::InputPane::GetForCurrentView(); // Unsubscribe from Showing/Hiding events inputPane-Showing - showingEventToken; inputPane-Hiding - hidingEventToken; }实现要点API 入口Windows::UI::ViewManagement::InputPane::GetForCurrentView()返回当前视图关联的输入面板实例全程无需获取页面控件事件类型Showing与Hiding事件参数为InputPaneVisibilityEventArgs本例未使用参数内容仅用于区分事件来源订阅/退订配对返回事件令牌token在OnNavigatedFrom中用-退订避免页面导航离开后继续收到事件造成泄漏或空指针访问——这是 UWP C/CX 事件处理的推荐模式事件处理器中仅更新LastInputPaneEventRun-Text为LShowing或LHiding页面据此实时回显最后一次键盘显隐动作。场景三TryShow / TryHide 编程控制Scenario 3场景三演示应用主动接管键盘显隐解决键盘遮挡内容的经典问题。页面 Scenario3_ShowHideMethods.xaml 定义了一个名为FadeOutResults的 Storyboard对结果文本ResultsTextBlock的Opacity执行 0→1 的DoubleAnimation时长 1 秒、AutoReverseTrue、QuarticEase EaseOut 缓动动画完成后触发OnFadeOutCompleted。后台逻辑 Scenario3_ShowHideMethods.xaml.cpp 的核心代码如下void Scenario3_ShowHideMethods::WordListBox_OnKeyUp(Object^ /*sender*/, KeyRoutedEventArgs^ e) { if (e-Key Windows::System::VirtualKey::Enter) { String^ text WordListBox-Text; if (!text-IsEmpty()) { InputPane::GetForCurrentView()-TryHide(); ResultsTextBlock-Text text; FadeOutResults-Begin(); } } } void Scenario3_ShowHideMethods::OnFadeOutCompleted(Object^ /*sender*/, Object^ /*e*/) { ResultsTextBlock-Text L; InputPane::GetForCurrentView()-TryShow(); }工作流程与设计意图用户在文本框中输入并按下Enter通过KeyDown事件WordListBox_OnKeyUp捕获VirtualKey::Enter调用InputPane::GetForCurrentView()-TryHide()立即隐藏触控键盘避免其遮挡下方将要显示的大字号结果文本FontSize150将输入内容写入结果文本并播放淡入动画动画结束后OnFadeOutCompleted清空结果文本并调用TryShow()重新唤起触控键盘恢复输入流程。这里体现了两个核心 API 的语义TryHide()尝试隐藏输入面板返回bool表示是否成功执行TryShow()尝试显示输入面板同样返回bool。与事件订阅不同这两个方法允许应用在任意时机不限于用户触摸文本控件时决定键盘的显隐典型场景即本示例演示的提交输入时收起键盘、展示结果后重新唤出。页面还保留了OnNavigatedFrom中对FadeOutResults-Stop()的调用防止页面导航离开时动画仍在运行。扩展阅读CustomEditControl 示例README 中专门提示Custom text edit control sample展示了如何在自定义文本编辑控件中以编程方式管理触控键盘的可见性。该示例位于 Samples/CustomEditControl 目录下与本示例形成互补本示例使用标准的 XAML 文本控件演示默认行为与事件/方法控制而 CustomEditControl 则将同样的InputPane控制逻辑下沉到自定义控件内部实现。关键结论默认行为零代码标准 XAML 文本控件及其派生控件的触控键盘唤起由系统自动完成前提是未激活硬件键盘且满足平板模式或系统设置项开启事件驱动感知通过InputPane::GetForCurrentView()订阅Showing/Hiding事件即可获知键盘显隐注意在页面退出时退订编程控制兜底TryShow()/TryHide()让应用在需要时主动收起或唤起键盘是处理键盘遮挡内容提交后收起输入法等交互的推荐手段运行前提Windows 10 Visual StudioC 版本对应 SDK 版本要求见 Package.appxmanifest。如需在自有 UWP 项目中复现可直接参考本仓库 archived/TouchKeyboard/cpp 目录下的三组 XAML/代码文件它们是理解Windows.UI.ViewManagement.InputPane体系最简练的入门范例。赞分享示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载相关推荐Windows-universal-samples 之 TouchKeyboardUWP 触摸键盘默认行为与程序化控制实战指南Windows universal samples 之 TouchKeyboardUWP 触摸键盘默认行为与程序化控制实战指南 导读 本文基于 Windows示例工程UWP Toast、LiveTile 与 Badge 通知机制实战Windows-universal-samples Notifications 示例详解UWP Toast、LiveTile 与 Badge 通知机制实战Windows universal samples Notifications 示例详解 W示例工程Windows-universal-samples 之 MessageDialog 示例UWP 消息对话框的命令定制、默认按钮与回调机制全解析Windows universal samples 之 MessageDialog 示例UWP 消息对话框的命令定制、默认按钮与回调机制全解析 本文以 Win示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
MySQLTuner 本地开发同步工作流:版本一致性、Changelog 自动整理与发布前自检实战 数据库运维 【免费下载链接】MySQLTuner-perl MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability. 项目地址: https://gitcode.com/gh_mirrors/my/My… · 2026/9/26 10:00:05
嵌入式驱动从“能跑”到“不崩”的工程化实践 1. 从“灯亮了”到“客户退货”:驱动开发里最隐蔽的断层你写完一个GPIO点灯驱动,烧进板子,LED稳稳亮起——那一刻的成就感,我太熟悉了。十年前我在深圳一家工控设备厂做第一版电机控制固件,也是这样:UART收… · 2026/9/26 10:00:05
DeskcommCRM:打破客户沟通碎片化的坐席工作台与自动化引擎 1. DeskcommCRM解决的不是"客户管理"问题,而是"客户沟通碎片化"问题很多团队在选型CRM时,第一反应是看它能不能存联系人、能不能建商机、能不能出报表。这些功能当然重要,但真正让一家公司决定替换掉旧系统的,… · 2026/9/26 10:37:53
从零搭建多渠道客服CRM平台:会话、工单与客户档案的数据流转实践 做客服系统的这些年,我一直有个感慨:很多团队不是没有工具,而是工具太多,反而把人逼疯了。客服桌上开着三四个聊天窗口,微信上挂一个、网页端一个、邮件客户端一个,客户问一句,客服来回切五个页… · 2026/9/26 10:37:53
单片机C++继承与虚函数的内存优化实践 1. 为什么在单片机上谈C的“继承”和“虚函数”,不是炫技而是刚需?你可能刚看到标题就皱眉:单片机?那个连printf都得自己重定向、RAM只有256字节、ROM掰着指头算KB的嵌入式小铁疙瘩,居然要上C?还要搞继承、… · 2026/9/26 10:37:53
MyBatis 游标 Cursor 流式查询:TaoToken 统一 Key 接入与配置骨架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 10:37:47
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46