Piszę aplikacje na Androida od kilku lat, a teraz tworzę aplikację Windows Store/Windows 8.Obsługa różnych orientacji podczas opracowywania aplikacji Windows 8 Store
Jestem bardzo zaskoczony, jak pisać różne układy ekranu dla orientacji poziomej i pionowej.
W systemie Android, wszystko co musimy zrobić, to napisać 2 układy, jeden dla portretu i drugi dla krajobrazu, zgodnie z konwencjami nazw dla nazw plików, a kiedy obracamy urządzenie, platforma automatycznie zmienia układ ekranu.
Szukałem jakiegoś rozwiązania, by zrobić to samo w mojej aplikacji Windows 8, a wszystko, co znalazłem, było rozwiązaniem wykorzystującym Visual State Groups i Visual States, wprowadzając te same XAML zmiany, które miały miejsce widżety po obróceniu urządzenia.
Na przykład, aby TextBlock zmienić swoją pozycję, kiedy obrócić urządzenie do orientacji pionowej:
<VisualState x:Name="FullScreenPortrait" >
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.ColumnSpan)" Storyboard.TargetName="GridViewTitle">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<x:Int32>3</x:Int32>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="GridViewTitle">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Thickness>0,10,10,807</Thickness>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
To nie wygląda bardzo czysty i prosty do mnie, a nawet robi to za pomocą Visual Studio podejście do przeciągania i upuszczania widżetów do generowania kodu Mam wrażenie, że musi istnieć łatwiejsze i czystsze rozwiązanie niż to, co robię.
Moje pytanie brzmi: czy istnieje jakieś łatwiejsze rozwiązanie do pisania układów XAML dla każdej orientacji, czy też idę w prawo, ale na swój sposób?
Dzięki!
Hmm. Brzmi nieźle, ale w moim kodzie, gdzie muszę obsłużyć wybraną zawartość niektórych gridviewów, powinienem zrobić coś takiego: 'if (portrait) {handle_my_gridview_portrait(); } else {handle_my_gridview_landscape(); } '. W każdym razie, to lepsze niż moje obecne rozwiązanie. Dzięki! –
Powyższe przykłady pokazują, w jaki sposób można inaczej wykryć zmianę orientacji. Można jednak zmienić wartość w DataContext i użyć opcji Powiązanie, aby również uniknąć opóźnień kodowych. – kimsk
Obie odpowiedzi na te pytania były dobre, ale wasza była bardziej adekwatna do mojego problemu. Dzięki i przepraszam za opóźnienie! –