【问题标题】:Height of Windows in WPF Application when Touch Keyboard appears触摸键盘出现时 WPF 应用程序中窗口的高度
【发布时间】:2016-09-21 22:15:47
【问题描述】:

我正在为 Windows 10 编写一个“可触摸”的 WPF 应用程序。想象一个包含以下网格的窗口:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
    </Grid.RowDefinitions>
    <TextBox Text="dsdsd"></TextBox>
    <TextBox Text="unten" Grid.Row="2" InputScope="Number"></TextBox>
</Grid>

如果我的应用程序至少使用 .NET 4.6.2 编译并且它的窗口最大化,我可以触摸下方的 TextBox 并打开触摸键盘。但是我看不到控件,因为键盘隐藏了它。此行为与打开键盘时减小渲染画布大小的 Windows 8.x 不同。在 Windows 开始栏搜索字段中执行相同操作时,该字段确实向上移动,因此我可以看到输入字段。使用最大化 explorer.exe 打开键盘时,窗口会变小。

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

干杯, 曼努埃尔

【问题讨论】:

  • 我已经发布了一个类似的问题here。我还寻找在 Windows 键盘 (dis) 出现时调用的事件。当 Windows 键盘被激活时,Skype 的输入字段会向上移动,因此必须有办法。你找到解决方案了吗?
  • 您查看过 IFrameworkInputPane 吗?它具有键盘面板的位置信息。 msdn.microsoft.com/en-us/library/windows/desktop/…

标签: c# wpf windows keyboard touch


【解决方案1】:

你在创建windows的时候试过使用吗:

    this.SizeToContent = SizeToContent.WidthAndHeight;

这将自动修复宽度和高度以适合当前大小。

来源: https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/how-to-automatically-size-a-window-to-fit-its-content

【讨论】:

    【解决方案2】:

    据我所知,如果您的 XAML 编写正确,即使窗口最大化,它也应该可以开箱即用,但我也遇到了这个问题,最终没有修复它(我本来希望到,但上级决定不关心它)。

    从我的调查来看,微软似乎修复了 Windows 如何对 Windows 1903 中触摸键盘的存在做出反应,而在 1809 和更早的版本中,Windows 不会调整大小窗户。您可以通过最大化资源管理器来测试这一点,看看在两个版本的 Windows 10 中会发生什么。

    此外,如果您的应用已将 WindowStyle 设置为 None,它会阻止 Windows 调整窗口大小以保持控件可见。我在这里的回答中谈到了这一点:WindowStyle None and touch input

    还可以通过检测触摸键盘的存在和位置来手动重新定位控件,请查看 Microsoft 的此示例:TouchKeyboardNotifier

    如果一切都失败了,我认为 TouchKeyboardNotifier 示例代码应该可以帮助您在不依赖 Windows 行为的情况下实现所需。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 2011-11-27
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2016-07-13
      • 2013-06-07
      • 2016-06-22
      相关资源
      最近更新 更多