2011-11-30 15 views
6

Sto sviluppando un'applicazione su un tablet con orientamento verticale.Orientamento WPF

Tuttavia, quando il tablet viene portato in modalità orizzontale, l'applicazione gira anche e tutti gli allineamenti vengono espulsi. Quindi c'è un modo in cui posso bloccare la mia applicazione WPF in un unico orientamento?

Grazie!

+1

Non è una risposta diretta alla tua domanda, ma se ridisegni la tua interfaccia utente per utilizzare un layout fluido, gli utenti non guarderanno l'interfaccia utente lateralmente quando trasformano il tablet in modalità orizzontale. WPF ha molte opzioni per fare layout fluente. –

+0

Stai usando una tela per fare il layout? –

risposta

6

Devo concordare con Martin: Ho sviluppato io stesso le app per Tablet PC e dovresti piuttosto fornire un layout che funzioni bene in orizzontale e verticale.

Oltre a questo è possibile rilevare la variazione dell'orientamento questo modo:

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

ho sono imbattuto lo stesso problema quando si sviluppa un'applicazione WPF per i tablet e abbiamo trovato questo articolo da MSDN che spiega come rilevare la rotazione e orientamento dello schermo: http://msdn.microsoft.com/en-us/library/ms812142.aspx

+0

Questo articolo è per Windows XP Tablet PC Edizione 2005 – Indy9000

0

Non sono a conoscenza di alcuna API pubblica per bloccare l'orientamento dello schermo. Principalmente perché, in genere, i produttori di Tablet PC hanno fornito i propri programmi di utilità o driver preinstallati che utilizzavano i dati dell'accelerometro per modificare l'orientamento. Non era una funzione OS integrata. Questo può cambiare in Windows 8.

Sebbene non corrisponda all'orientamento del blocco, è possibile provare a reagire alle modifiche di orientamento aggiungendo una trasformazione ruotata a LayoutTransform del contenitore radice. Ciò cambierebbe lo spazio del layout in modo che la tua applicazione pensasse che fosse ancora ruotata di 90 gradi ma il resto del sistema operativo non sarebbe stato d'accordo. Pertanto è davvero pratico solo per le applicazioni a schermo intero.

2

Sven fa un buon lavoro che mostra come rilevare modifica Orientamento ...

Tuttavia, se non si sta scrivendo un'applicazione Metro (dove è possibile impostare orientamenti preferenziali nel manifesto) non c'è modo reale per NON lasciare che il cambiamento di orientamento, se siete interessati a consentendo solo Ritratto si poteva fare qualcosa di simile:

Vista Modello:

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

in te principale Window.xaml:

012.

Quindi non stiamo davvero limitando l'orientamento, stiamo solo notando quando accade e ruotando nuovamente la nostra interfaccia utente in modo che sembri ancora in modalità Portrait :) Ancora una volta questo è principalmente per applicazioni Metro Win 8 non e o applicazioni che funzionano anche su Win 7 compresse.

+0

Questa non sembra una buona soluzione, perché ho visto alcuni giochi non hanno bisogno di ruotare il gioco, è solo possibile disabilitare la modalità ritratto durante il gioco. – qakmak