Как изменить ориентацию одного компонента в 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>
Другие вопросы по тегам