我有一个Silverlight页面,我希望在纵向和横向模式下有下面的外观。基本上,有三个图像排列在一个网格中。大图像横跨两列。当手机旋转时,图像会旋转,但整体布局不会。小图像保持靠近后/窗/搜索按钮,大图像保持在手机的顶部。方向变化时保持相同的布局
我已经尝试了许多方法来达到这种效果,但他们都证明了这样或那样的不满意。我希望有人能指出我错过的东西,或者至少可以防止其他人浪费4或5天来得出与我所做的相同的结论。 问题粗体部分:
我试图在应用RotateTransform到LayoutRoot元素,其旋转-90度,每当手机旋转而改变为横向的第一件事。我必须将布局根的高度和宽度硬编码为800和400,而不是“自动”,否则它会被压扁。这个解决方案几乎可以工作,但是在绘制页面之后,RotateTransform会被应用。由于它在800x400屏幕上绘制为400x800图像,因此不会绘制顶部200像素和底部200像素。旋转后,(现在)左侧和右侧部分丢失后,这变得很明显。 有没有办法强制布局引擎绘制屏幕,以便在应用RotateTransform后所有像素都在那里?
我认为(但没有尝试),接下来的事情就是设置页面SupportedOrientations为“PortraitOnly”,然后使用加速度计来生成自己的“OnOrientationChanged”事件,然后有选择地在90度旋转图像手机倾斜景观。我确定这是一个糟糕的主意,因为我可能会以某种微妙的方式导致错误,导致旋转在我的应用中与其他应用中的旋转方式不同。 有没有办法让OnOrientationChanged事件触发,而不会自动更新包含我的元素的网格布局?或者,是否还有其他可用于检测电话方向的挂钩?
我试过的最后一件事与这里提供的建议类似:Windows Phone 7 applications - Orientation Change和here:http://blogs.msdn.com/b/ptorr/archive/2010/03/27/strategies-for-dealing-with-orientation-changes.aspx。这个解决方案对我来说似乎有些脆弱,因为它迫使我在OnOrientationChanged事件处理程序以及xaml代码中更改网格行和列的相对大小。在人像模式中,第一行设置为5 *,第二行设置为2 *。然后,当我切换到横向时,行需要被设置为1 *,并且列需要分别设置为5 *和2 *。另外,我可以对小图像的大小进行硬编码,并将行和列设置为自动,但是我仍然坚持对某些东西进行编码。 由于我已经耗尽了所有其他选项,我认为这是我坚持使用的解决方案。
我错过了什么,或者是这样做的吗?
这非常聪明,但您还必须确保您密切关注边距,否则图像的高宽比会发生一些变化。注意左边的小笑脸是正方形的,右边是更多的矩形。 – 2012-07-09 22:09:54
是的,你是对的。我注意到,列纵横比也有一点问题。但足以传达我想说的话:) – naqvitalha 2012-07-10 04:36:01