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

Touch Keyboard Hiding UI Element [Windows 10 & WPF]

我正在使用 .NET 5 为 Windows 10 编写 'touch-able' WPF 应用程序。

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

首先,我的 MainWindow 不是 'Maximized',我的 WindowStyle 也不是 'None'。

<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">

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

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

谢谢你,亚瑟

更新:

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

我和 OP 在做同一个项目。

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

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

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

在 Net 5 中移植 Microsoft 的修复程序,以便我们也可以使用它!

谢谢。

更新

因此,经过进一步的研究,我发现了如何借助此 post http://mheironimus.blogspot.com/2015/05/adding-touch-keyboard-support-to-wpf.html 解决我们的问题。 还有这个

    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 必须以 windows 可以在键盘出现时调整应用程序大小的方式进行编码,基本上一个带有堆栈面板的滚动查看器就可以了。

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

感谢其他 post 用户,希望这 post 也能帮助其他人。