是否有一个API可以锁定我的WPF应用程序的方向,使其仅在横向模式下运行。
我可以找到可能触发方向更改的事件,但是有办法锁定它
Microsoft.Win32.SystemEvents.DisplaySettingsChanged
答案 0 :(得分:0)
我认为WPF中没有办法锁定它,你可以为根容器提供一个旋转布局转换。它实际上并不是锁定方向,而是旋转您的应用程序。像这样的东西,
<Grid.RenderTransform>
<RotateTransform Angle="-90"/>
</Grid.RenderTransform>
请在这里阅读,
答案 1 :(得分:0)
对于遇到此问题并需要更多详细信息的任何人,这是一个非常详细的答案...
看来,由于平板电脑轮换支持是在各个供应商级别完成的,因此Windows 7/8除了检测到轮换发生变化外,对它的支持不多。仍然可以通过一点XAML技巧将屏幕伪锁定为横向格式。这是我昨晚敲下来并在平板电脑上测试的一些示例代码...
MainWindow.xaml
next_article = response.css("a.item-wrapper::attr(href)").get()
if next_article:
yield scrapy.Request(response.urljoin(next_article))
MainWindow.xaml.cs
<Window x:Class="LockRotationWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:LockRotationWpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid HorizontalAlignment="Center"
VerticalAlignment="Center"
RenderTransformOrigin="0.5,0.5" >
<Grid.RenderTransform >
<RotateTransform Angle="{Binding Angle}" />
</Grid.RenderTransform>
<StackPanel>
<TextBlock FontSize="100" Text="Landscape"/>
<TextBlock Text="{Binding Angle}" TextAlignment="Center"/>
</StackPanel>
</Grid>
</Window>
ViewModels \ MainWindowViewModel.cs
using System.Windows;
using LockRotationWpf.ViewModels;
namespace LockRotationWpf
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var vm = new MainWindowViewModel();
DataContext = vm;
}
}
}
以下是显示方向变化的几个屏幕截图。如果您在全屏模式下运行应用程序,则不会获得窗口镶边,也不会知道屏幕实际上已经旋转过。当然,任何响应文本输入而打开的屏幕键盘仍会在纵向位置弹出,但是内容始终为横向的事实应为操作员提供足够的提示,以使数位板转向输入。
我希望对任何登陆这里的人有所帮助。
答案 2 :(得分:0)
这对我有用
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetDisplayAutoRotationPreferences")]
private static extern UInt32 SetDisplayAutoRotationPreferences8(UInt32 orientation);
[System.Runtime.InteropServices.DllImport("kernel", EntryPoint = "SetDisplayAutoRotationPreferences")]
private static extern UInt32 SetDisplayAutoRotationPreferences7(UInt32 orientation);
在加载主窗口时:
SetDisplayAutoRotationPreferences8(2);//Lanscape