触摸键盘隐藏 UI 元素 [Windows 10 和 WPF]

Posted

技术标签:

【中文标题】触摸键盘隐藏 UI 元素 [Windows 10 和 WPF]【英文标题】:Touch Keyboard Hiding UI Element [Windows 10 & WPF] 【发布时间】:2021-08-06 22:00:08 【问题描述】:

我正在使用 .NET 5 为 Windows 10 编写一个“可触摸”WPF 应用程序。

我一直在 Stack Overflow 上寻找答案,但我没有找到任何答案,这就是我问它的原因。

首先,我的 MainWindow 不是“最大化”,我的 WindowStyle 不是“无”。

<Window
    x:Class="App1234.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:prism="http://prismlibrary.com/"
    xmlns:notifications="clr-namespace:Notification.Wpf.Controls;assembly=Notifications.Wpf"
    Title="App1234"
    d:DesignHeight="1200"
    d:DesignWidth="1920"
    prism:ViewModelLocator.AutoWireViewModel="True"
    Background="DynamicResource MaterialDesignPaper"
    FontFamily="materialDesign:MaterialDesignFont"
    Loaded="MainWindow_OnLoaded"
    TextElement.FontSize="14"
    TextElement.FontWeight="Medium"
    TextElement.Foreground="DynamicResource MaterialDesignBody"
    mc:Ignorable="d">

我可以触摸下方的 TextBox 并且触摸键盘打开。 但是我看不到控件,因为键盘隐藏了它。 我想“调整”我的应用程序的大小,以便仍然可以看到控件

如何在 WPF 应用程序中实现此行为?

谢谢你,亚瑟

更新:

我们还以没有 uiAcess 标志的管理员身份启动了我们的应用程序。解决方案(除了回复)是删除管理员要求。

【问题讨论】:

【参考方案1】:

我正在和 OP 做同一个项目。

我们发现了这个https://github.com/microsoft/WPF-Samples/tree/master/Input%20and%20Commands/TouchKeyboard。 在此示例中,Microsoft 提供了一些代码来解决带有 .net 框架的 WPF 问题。

现在这很适合他们的用例。但我一直在尝试使用 NET 5 项目来实现他们的代码。不出所料,这似乎是不可能的(应用程序只是在启动时崩溃并溢出)

那么有谁知道是否有办法让应用同时使用 NET 5 和 .net 框架?

或者

将微软的修复移植到 Net 5 中,这样我们也可以使用它!

谢谢。

更新

因此,经过进一步的重新搜索,我发现了如何借助这篇帖子 http://mheironimus.blogspot.com/2015/05/adding-touch-keyboard-support-to-wpf.html 来解决我们的问题。 还有这个https://***.com/a/57463543/14620831

    private void Window_SizeChanged(object sender, SizeChangedEventArgs e)

var elementWithFocus = Keyboard.FocusedElement as FrameworkElement;

    if ((elementWithFocus != null) && ((e.PreviousSize.Height > e.NewSize.Height)))
    
        elementWithFocus.BringIntoView();
    

这两个链接都有助于了解问题所在。首先,xaml 必须以一种在键盘出现时窗口可以调整应用程序大小的方式进行编码,基本上一个带有 stackpanel 的滚动查看器就可以了。

但这仅足以使窗口调整大小,这是代码 sn-p 允许滚动查看器“滚动”到单击的元素并将其带到虚拟触摸键盘上方的时候。

感谢其他发帖者,希望这篇文章也能帮助到其他人。

【讨论】:

以上是关于触摸键盘隐藏 UI 元素 [Windows 10 和 WPF]的主要内容,如果未能解决你的问题,请参考以下文章

WP虚拟键盘隐藏底部UI元素

在焦点事件 TextBox 上打开触摸键盘 windows 10 |通用应用

如何使 Unity 3D 输入字段支持的 Windows 10 触摸键盘滑动和预测?

触摸uitableview时隐藏键盘

swift Swift - 用户触摸屏幕时隐藏键盘

如何在iOS Obj-C中隐藏键盘触摸UITableView