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

时间:2015-03-19 10:08:32

标签: wpf rotation windows-8.1 tablet

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

我的应用程序需要全屏显示,因此,我设置了我的观点:

 WindowState="Maximized"
 WindowStyle="ToolWindow"

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

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

enter image description here

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

我试图收听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();
}

正如你所看到的,我甚至试图更新布局,但仍然没有工作! 奇怪的是,如果您在任何位置启动应用程序但不在正常位置启动应用程序,它将起作用。例如:如果应用程序以纵向模式启动,则旋转不会更改窗口的尺寸,但如果从横向模式开始运行应用程序...则会出现错误。

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

有什么建议吗?

编辑:似乎问题是由键盘引起的。保留区域用于键盘,但我找不到调整大小到全屏的方法。实际宽度,宽度和所需宽度都相同......

Edit2:此错误只能在Windows 8.1上重现

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

此错误的工作原理是收听DisplaySettingsChanged并手动将窗口状态设置为正常,并在窗口状态最大化后,如下所示:

  SystemEvents.DisplaySettingsChanged += Current_SizeChanged;



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


        }

这是由:

引起的
  WindowStyle="ToolWindow" 

希望微软将解决这个错误(我在MSDN上的WPF线程上提交了错误)。谢谢你的帮助!

答案 2 :(得分:0)

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