Как изменить ориентацию одного компонента в Windows Phone 8 страницы с заблокированной ориентацией
Я работаю над приложением Windows Phone 8/8.1 C#/XAML .NET 4.5 и хотел бы узнать, как изменить ориентацию только одного элемента управления / элемента на странице (повернуть его на 90 градусов).
У меня есть веб-браузер на моей книжной странице (который остается заблокированным в этой ориентации), и веб-браузер должен быть в альбомной ориентации (и не вращаться).
Как я могу настроить веб-браузер на 90 градусов и оставаться таким же?
1 ответ
Итак, я нашел один способ сделать это самостоятельно.
Я собираюсь разместить ответ как вики сообщества, чтобы каждый, кто придет позже, мог отредактировать и добавить дополнительные опции для этого.
Преобразование вращения
Одним из вариантов является вращение элемента.
Это делается с помощью преобразования вращения (ответ в сочетании с этим и этим вопросом).
Это можно сделать в коде:
//Create a transformation
RotateTransform rt = new RotateTransform();
//and set the rotation angle
rt.Angle = 90; //number of degrees to rotate clockwise
//for counterclockwise rotation use negative number
//default rotation is around top left corner of the control,
//but you sometimes want to rotate around the center of the control
//to do that, you need to set the RenderTransFormOrigin
//of the item you're going to rotate
//I did not test this approach, maybe You're going to need to use actual coordinates
//so this bit is for information purposes only
controlToRotate.RenderTransformOrigin = new Point(0.5,0.5);
//the name of the control is controlToRotate in this instance
controlToRotate.RenderTransform = rt;
Или в XAML:
браузер в этом случае взят из моего собственного кода, и все настроено так, что элемент поворачивается и занимает все назначенное ему место
браузер находится в сетке, расположен динамически, сетка названа так, чтобы я мог получить к ней доступ просто
в браузере должны быть указаны ширина и высота, в данном случае я беру это из ширины и высоты сетки, в противном случае она устанавливается каким-то образом автоматически, и результат довольно маленький
Вертикальное и горизонтальное выравнивание установлены по центру, поэтому результирующее вращение также центрируется, в противном случае это не так (в динамическом макете)
Код:
<Grid x:Name="ContentPanel">
<phone:WebBrowser x:Name="controlToRotate"
VerticalAlignment="Center"
HorizontalAlignment="Center"
RenderTransformOrigin=".5, .5"
Width="{Binding ElementName=ContentPanel, Path=ActualHeight}"
Height="{Binding ElementName=ContentPanel, Path=ActualWidth}">
<phone:WebBrowser.RenderTransform>
<RotateTransform Angle="90"/>
</phone:WebBrowser.RenderTransform>
</phone:WebBrowser>
</Grid>