2011-11-30 19 views
6

Estoy desarrollando una aplicación en una tableta con orientación vertical.WPF Orientación

Sin embargo, cuando la tableta cambia al modo horizontal, la aplicación también gira y se quitan todas las alineaciones. Entonces, ¿hay alguna manera de bloquear mi aplicación WPF en una sola orientación?

¡Gracias!

+1

No es una respuesta directa a su pregunta, pero si rediseña su interfaz de usuario para usar un diseño fluido, sus usuarios no habrán visto su UI de lado cuando convierten la tableta en modo apaisado. WPF tiene muchas opciones para hacer un diseño fluido. –

+0

¿Estás usando un lienzo para hacer el diseño? –

Respuesta

6

Tengo que estar de acuerdo con Martin: He desarrollado aplicaciones para Tablet PC y debería proporcionar un diseño que funcione bien en paisajes y retratos.

Además de que se puede detectar el cambio en la orientación de esta manera:

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 
    } 
} 
0

he encontré con el mismo problema en el desarrollo de una aplicación de WPF para las tabletas y encontró este artículo de MSDN que explica cómo detectar la rotación y orientación de la pantalla: http://msdn.microsoft.com/en-us/library/ms812142.aspx

+0

Este artículo es para Windows XP Tablet PC Edición 2005 – Indy9000

0

No tengo conocimiento de ninguna API pública para bloquear la orientación de la pantalla. Principalmente porque, por lo general, los fabricantes de Tablet PC proporcionan sus propias utilidades preinstaladas o controladores que utilizan datos del acelerómetro para cambiar la orientación. No fue una función construida en el sistema operativo. Esto puede estar cambiando en Windows 8.

Si bien no es lo mismo que bloquear la orientación, puede intentar reaccionar a los cambios de orientación agregando una transformación de rotación a LayoutTransform de su contenedor raíz. Esto cambiaría el espacio de diseño para que su aplicación pensara que todavía estaba girada 90 grados, pero el resto del sistema operativo no estaría de acuerdo. Por lo tanto, en realidad solo es práctico para aplicaciones de pantalla completa.

2

Sven hace un buen trabajo mostrando cómo detectar el cambio de orientación ...

Sin embargo, si usted no está escribiendo una aplicación de Metro (donde se puede establecer orientaciones preferentes en el manifiesto) no hay forma real de NO dejar que el cambio de orientación, sin embargo, si usted está interesado en que sólo permite Retrato usted podría hacer algo como esto:

Ver Modelo:

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"); 
} 

en principal que 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> 

Así que realmente no estamos limitando la Orientación, solo estamos notando cuando sucede y volviendo a girar nuestra UI para que parezca que está en modo vertical :) De nuevo, esto es principalmente para aplicaciones que no son Metro Win 8 y o aplicaciones que también se ejecutan en tabletas Win 7.

+0

Parece que no es una buena solución, ya que vi algunos juegos no es necesario rotar el juego, solo puede deshabilitar el modo retrato cuando se juega. – qakmak

Cuestiones relacionadas