xaml – 在开发Windows 8 Store应用程序时处理不同的方向
发布时间:2020-12-13 21:24:12 所属栏目:Windows 来源:网络整理
导读:我已经写了几年 Android应用程序了,现在我正在开发一个Windows应用商店/ Windows 8应用程序. 我对如何为横向和纵向方向编写不同的屏幕布局感到很困惑. 在Android中,我们所要做的就是编写2个布局,一个用于纵向,另一个用于横向,遵循文件名的一些名称约定,当我
我已经写了几年
Android应用程序了,现在我正在开发一个Windows应用商店/ Windows 8应用程序.
我对如何为横向和纵向方向编写不同的屏幕布局感到很困惑. 在Android中,我们所要做的就是编写2个布局,一个用于纵向,另一个用于横向,遵循文件名的一些名称约定,当我们旋转设备时,平台会自动更改屏幕布局. 我一直在谷歌搜索一些解决方案在我的Windows 8应用程序中做同样的事情,我发现所有的是使用Visual State Groups和Visual States的解决方案,在我们旋转时对我们的小部件进行一些修改装置. 例如,要在将设备旋转为纵向时使文本块更改其位置: <VisualState x:Name="FullScreenPortrait" > <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.ColumnSpan)" Storyboard.TargetName="GridViewTitle"> <DiscreteObjectKeyFrame KeyTime="0"> <DiscreteObjectKeyFrame.Value> <x:Int32>3</x:Int32> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="GridViewTitle"> <DiscreteObjectKeyFrame KeyTime="0"> <DiscreteObjectKeyFrame.Value> <Thickness>0,10,807</Thickness> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> 它对我来说看起来不是很干净和简单,甚至使用Visual Studio拖放小部件来生成代码的方法,我的印象是必须有一些比我正在做的更容易和更清晰的解决方案. 所以我的问题是:是否有更简单的解决方案为每个方向编写XAML布局,或者我是否正确,但很难? 谢谢!
处理不同方向的一种方法是创建两个Grid元素及其子元素,并根据方向更改网格的可见性.
要检测方向更改,您还可以使用SimpleOrientation传感器,如下面的代码: public sealed partial class MainPage : Page { private SimpleOrientationSensor _oSensor; public MainPage() { this.InitializeComponent(); _oSensor = SimpleOrientationSensor.GetDefault(); } protected override void OnNavigatedTo(NavigationEventArgs e) { if (_oSensor != null) _oSensor.OrientationChanged += (s,a) => { Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { switch (a.Orientation) { case SimpleOrientation.NotRotated: case SimpleOrientation.Rotated180DegreesCounterclockwise: currentOrientation.Text = "Landscape"; break; case SimpleOrientation.Rotated270DegreesCounterclockwise: case SimpleOrientation.Rotated90DegreesCounterclockwise: currentOrientation.Text = "Portrait"; break; default: currentOrientation.Text = "N/A"; break; } }); }; } } 或者最简单的方法是处理SizeChanged事件,如下面的代码: public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); mainGrid.SizeChanged += mainGrid_SizeChanged; } void mainGrid_SizeChanged(object sender,SizeChangedEventArgs e) { if (mainGrid.ActualHeight > mainGrid.ActualWidth) currentOrientation.Text = "Portrait"; else currentOrientation.Text = "Landscape"; } } 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- windows-server-2008 – DC的只读配置是否仅适用
- 备份 – 在Windows 2012,Windows 2012R2上复制大
- winapi – 诊断Win32程序中的死锁
- 窗口 – 如果条件在批处理文件
- 无法在Windows 7上运行作为服务的Tomcat7使用JVi
- .net – Windows / Linux之间的Unison同步在传输
- 使用Powershell找出使用大量内存的内容(在64位Wi
- Windows Phone 7 – 处理ViewModel中的OnNavigat
- windows2008 R2服务器中64位下怎样开启php curl扩
- windows-server-2003 – 打开certmgr.msc以显示计
热点阅读