Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF定向_Wpf_Orientation - Fatal编程技术网

WPF定向

WPF定向,wpf,orientation,Wpf,Orientation,我正在平板电脑上开发一个纵向应用程序 但是,当平板电脑切换到横向模式时,应用程序也会切换,所有对齐都会被取消。那么,有没有办法将我的WPF应用程序锁定到一个方向 谢谢大家! 我必须同意:我自己开发了平板电脑应用程序,你应该提供一个在横向和纵向上都能很好工作的布局 除此之外,您还可以通过以下方式检测方向的变化: Microsoft.Win32.SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySe

我正在平板电脑上开发一个纵向应用程序

但是,当平板电脑切换到横向模式时,应用程序也会切换,所有对齐都会被取消。那么,有没有办法将我的WPF应用程序锁定到一个方向

谢谢大家!

我必须同意:我自己开发了平板电脑应用程序,你应该提供一个在横向和纵向上都能很好工作的布局

除此之外,您还可以通过以下方式检测方向的变化:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged);
}

void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
  if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
  {
    // runs in landscape
  }
  else
  {
    // runs in portrait
  }
}

我在为平板电脑开发wpf应用程序时遇到了同样的问题,并从msdn中找到了这篇文章,解释了如何检测屏幕旋转和方向:

我不知道有任何公共API可以锁定屏幕方向。主要原因是,平板电脑制造商通常提供自己的预装实用程序或驱动程序,使用加速计数据改变方向。它不是一个内置的操作系统功能。这在Windows 8中可能会发生变化


虽然这与锁定方向不同,但您可以尝试通过向根容器的LayoutTransform添加旋转变换来对方向更改作出反应。这将改变布局空间,使您的应用程序认为它仍然旋转90度,但操作系统的其他部分不会同意。因此,它实际上只适用于全屏应用程序。

Sven很好地展示了如何检测方向变化

但是,如果您没有编写Metro应用程序(您可以在清单中设置首选方向),没有真正的方法不让方向改变,但是如果您只想允许纵向,您可以这样做:

视图模型:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += new           
    EventHandler(SystemEvents_DisplaySettingsChanged);
}

public bool IsLandscape { get; set; }

void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
  if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
  {
      IsLandscape = true;
  }
  else
  {
      IsLandscape = false;
  }

  RaisePropertyChanged( "IsLandscape" );
}
在Main Window.xaml中:

<Border >
    <Border.Style>
        <Style TargetType="{x:Type Border}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLandscape}" Value="True">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <RotateTransform Angle="90"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
         </Style>
    </Border.Style>

///The rest of your controls and UI

</Border>

///其余的控件和UI

因此,我们确实没有限制方向,我们只是注意到它发生的时间,并重新旋转我们的UI,使其看起来仍然处于纵向模式:)同样,这主要适用于非Metro Win 8应用程序和/或运行在Win 7平板电脑上的应用程序。

不是对您问题的直接回答,但是,如果你重新设计你的用户界面以使用流畅的布局,那么当用户将平板电脑转换为横向模式时,他们就不会从侧面看你的用户界面。WPF有很多选择来进行流畅的布局。你是使用画布来进行布局吗?这篇文章是针对Windows XP Tablet PC Edition 2005的,看起来不是一个好的解决方案,因为我看到一些游戏不需要旋转游戏,它只是可以在玩游戏时禁用纵向模式。