如何处理要在平板电脑上使用的 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。
我目前正在开发一个 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。