gpt4 book ai didi

c# - WPF 窗口大小不受 TabTip 键盘影响

转载 作者:可可西里 更新时间:2023-11-01 08:48:15 24 4
gpt4 key购买 nike

我有一个在 Windows 8.1 平板电脑上运行的 WPF 应用程序。应用程序使用以下方法显示虚拟键盘:

public static void OpenKeyboard()
{
ProcessStartInfo startInfo =
new ProcessStartInfo(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe")
{
WindowStyle = ProcessWindowStyle.Hidden
};
Process.Start(startInfo);
}

但是,键盘显示在其上的事件窗口的大小不会相应地改变,这意味着如果我有一个 ScrollViewer 围绕我的窗口的所有元素,它不会响应键盘。
有什么方法可以让我的窗口知道键盘的存在吗?
更新
尝试注册到窗口的 SizeChanged 事件,但在弹出键盘时没有引发。

最佳答案

由于 TabTip.exe 是一个单独的进程,它不会触发 WPF 应用程序中的任何事件。由于 win 8.1 tabtip 不再自动调整窗口大小。 (对此有很多提示)

您可以通过多种方式手动执行此操作。首先,Win8 应用程序有所谓的“LayoutAware”页面。可以使用 VisualStateManager 在 WPF 中完成类似的事情。这相当复杂,可能不是最好的解决方案,但我还是将其包括在内(VisualStateManager solution here

另一种方法是从事件进程列表中获取 tabtip 进程并计算其宽度和高度,并使用它手动调整屏幕大小。Tabtip 是如果我没有记错的话大约 270 高。您也可以在该过程出现后立即直接调整屏幕大小。像这样的东西;

  public void OpenKeyboard()
{
ProcessStartInfo startInfo =
new ProcessStartInfo(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe")
{
WindowStyle = ProcessWindowStyle.Hidden
};
Process.Start(startInfo);

//this = your window
this.Height -= 270;

}

还有另一种更干净的方式。这有点困难,我自己还没有尝试过。可以抓取进程并在需要的位置调整它的大小。您可以使用 Windows API 调用“findWindow()”来完成此操作,但据我所知,这并不总是适用于 tabtip,您可能必须使用 P/Invoke。为了让你开始,我找到了一些非常好的资源,我不会通过复制这里的代码来窃取信用; How to resize another application's window in C#

Changing another applications size and position using P/invoke (win32)

希望此信息对您有用。我知道你的感受,而且我自己也比 id like 更经常地与 tabtip 作斗争。

脚注;在调用 osk 时降低最大窗口高度并将其移至屏幕顶部并在其被杀死时将其放回原处不是更容易吗?

关于c# - WPF 窗口大小不受 TabTip 键盘影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30482440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com