如何处理要在平板电脑上使用的 WPF 应用程序的旋转

How to handle rotation of WPF Application to be used on Tablets

我目前正在开发一个 WPF 应用程序,它将 运行 在 Windows 8.1 平板电脑上运行,但我没有找到任何关于以下问题的帖子:

我的应用需要全屏,所以,我的观点设置为:

 WindowState="Maximized"
 WindowStyle="ToolWindow"

好的 - 我的应用程序将以全屏模式显示:

但是,如果我旋转平板电脑,则会分配 space 并且应用程序不会全屏显示。

我不希望这种情况发生,应用程序应始终保持全屏。

我尝试监听 SystemEvents.DisplaySettingsChanged 事件并手动设置全屏:

SystemEvents.DisplaySettingsChanged += Current_SizeChanged;

private void Current_SizeChanged(object sender, EventArgs eventArgs)
{
    this.WindowStyle = WindowStyle.None;
    this.ResizeMode = ResizeMode.NoResize;
    this.WindowState = WindowState.Maximized;    
    this.UpdateLayout();
}

如您所见,我什至尝试更新布局,但仍然无法正常工作! 奇怪的是,如果您在任何位置而不是正常位置启动应用程序,它都可以运行。例如:如果应用程序以纵向模式启动,旋转将不会改变 window 的尺寸,但是如果您 运行 应用程序从横向模式启动...错误出现。

您可以使用 Ctrl + Alt + 箭头调试此问题。

有什么建议吗?

编辑: 看来问题出在键盘上。保留区域用于键盘,但我找不到调整为全屏大小的方法。实际宽度、宽度和所需宽度都相同...

Edit2: 此错误只能在 Windows 8.1

上重现

您可以使用 SystemEvents class 的 DisplaySettingsChanged 事件。这是一个例子 -> How to Detect Screen Rotation

此错误的解决方法是监听 DisplaySettingsChanged 并手动将 windows 状态设置为正常,然后将 windows 状态设置为最大化,如下所示:

  SystemEvents.DisplaySettingsChanged += Current_SizeChanged;



  private void Current_SizeChanged(object sender, EventArgs eventArgs)
        {
            this.WindowState = WindowState.Normal;
            this.WindowState = WindowState.Maximized;


        }

这是由于:

  WindowStyle="ToolWindow" 

希望微软解决这个bug(我在MSDN上提交了WPF线程的bug)。感谢您的帮助!

在将在 Current_SizeChanged 方法中设置的视图模型中使用 属性。然后在此布尔值上放置一个数据触发器并将 RotateTransform 90deg 应用于您的 LayoutTransform。