2011-11-30 8 views
6

Zajmuję się tworzeniem aplikacji na tablecie z orientacją pionową.Orientacja WPF

Po włączeniu tabletu w trybie poziomym aplikacja również się obraca, a wszystkie linie trasowania są odrzucane. Czy istnieje sposób, w jaki mogę zablokować moją aplikację WPF w jednej orientacji?

Dziękujemy!

+1

Nie jest to bezpośrednia odpowiedź na Twoje pytanie, ale jeśli przeprojektujesz interfejs użytkownika tak, aby korzystał z płynnego układu, użytkownicy nie będą patrzeć na twój interfejs na boki, gdy przekręcą tablet w tryb poziomy. WPF ma wiele opcji do robienia płynnego układu. –

+0

Czy używasz układu Canvas do zrobienia? –

Odpowiedz

6

Muszę się zgodzić z Martin: Sam opracowałem aplikacje na tablety PC i powinieneś raczej zapewnić układ, który działa dobrze w orientacji poziomej i pionowej.

Poza tym można wykryć zmiany orientacji w ten sposób:

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

Nie znam żadnego publicznego interfejsu API, który blokowałby orientację ekranu. Głównie dlatego, że zazwyczaj producenci komputerów typu Tablet dostarczali swoje własne fabrycznie zainstalowane narzędzia lub sterowniki, które wykorzystują dane przyspieszenia do zmiany orientacji. To nie była wbudowana funkcja systemu operacyjnego. To może się zmieniać w Windows 8.

Chociaż nie jest to to samo, co orientacja blokowania, możesz spróbować zareagować na zmiany orientacji, dodając transformację rotacji do LayoutTransform kontenera głównego. Zmieniłoby to przestrzeń układu, tak aby aplikacja myślała, że ​​nadal jest obrócona o 90 stopni, ale reszta systemu operacyjnego nie zgodziłaby się. Dlatego jest to naprawdę praktyczne tylko w przypadku aplikacji pełnoekranowych.

2

Sven ma dobrą pracę pokazujący jak wykrywać zmiany orientacji ...

Jednak jeśli nie piszesz aplikację metra (w którym można ustawić preferowane kierunki w manifeście) nie istnieje prawdziwy sposób na NIE niech zmianę orientacji, jednak jeśli jesteś zainteresowany tylko pozwalając Portret mógłby zrobić coś takiego:

Zobacz model:

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

w tobie Main 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> 

Tak naprawdę nie ograniczamy orientacji, zauważamy tylko, kiedy to się dzieje, i ponownie obracamy nasz interfejs, więc nadal wygląda tak, jakby był w trybie portretowym :) Znowu dotyczy to głównie aplikacji innych niż Metro Win 8 i lub aplikacje, które działają również na Win 7 tabletów.

+0

To nie wygląda na dobre rozwiązanie, ponieważ widziałem, że niektóre gry nie wymagają obracania gry, to może wyłączyć tryb portretowy podczas grania. – qakmak