如何锁定WPF应用程序的方向

时间:2014-04-03 02:37:59

标签: wpf

是否有一个API可以锁定我的WPF应用程序的方向,使其仅在横向模式下运行。

我可以找到可能触发方向更改的事件,但是有办法锁定它

Microsoft.Win32.SystemEvents.DisplaySettingsChanged

3 个答案:

答案 0 :(得分:0)

我认为WPF中没有办法锁定它,你可以为根容器提供一个旋转布局转换。它实际上并不是锁定方向,而是旋转您的应用程序。像这样的东西,

<Grid.RenderTransform>
            <RotateTransform Angle="-90"/>
</Grid.RenderTransform>

请在这里阅读,

Layout Transformation

答案 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;
        }
    }
}

以下是显示方向变化的几个屏幕截图。如果您在全屏模式下运行应用程序,则不会获得窗口镶边,也不会知道屏幕实际上已经旋转过。当然,任何响应文本输入而打开的屏幕键盘仍会在纵向位置弹出,但是内容始终为横向的事实应为操作员提供足够的提示,以使数位板转向输入。

  

Holding the tablet in Landscape orientation

     

Holding the tablet in Portrait orientation

我希望对任何登陆这里的人有所帮助。

答案 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