Tôi đã viết các ứng dụng Android trong vài năm và bây giờ tôi đang phát triển một ứng dụng Windows Store/Windows 8.Xử lý các định hướng khác nhau trong khi phát triển các ứng dụng Windows 8 Store
Tôi rất bối rối về cách viết bố cục màn hình khác nhau để định hướng ngang và dọc. Trong Android, tất cả những gì chúng ta phải làm là viết 2 bố cục, một cho chân dung và một bố cục khác, theo một số quy ước tên cho tên tệp và khi chúng ta xoay thiết bị, nền tảng thay đổi bố cục màn hình một cách tự động.
Tôi đã googling cho một số giải pháp để làm tương tự trong ứng dụng Windows 8 của tôi, và tất cả tôi đã tìm thấy là một giải pháp sử dụng Visual State Groups và Visual States, đưa vào cùng một XAML một số sửa đổi xảy ra với chúng tôi widget khi chúng ta xoay thiết bị.
Ví dụ, để thực hiện một TextBlock thay đổi vị thế của mình khi tôi xoay điện thoại để hướng dọc:
<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>
Nó không nhìn rất sạch sẽ và đơn giản với tôi, và thậm chí làm điều đó bằng cách sử dụng Visual Studio của cách tiếp cận của việc kéo và thả các widget để tạo mã Tôi có ấn tượng rằng phải có một số giải pháp dễ dàng hơn và sạch hơn so với những gì tôi đang làm. Vì vậy, câu hỏi của tôi là: có bất kỳ giải pháp dễ dàng hơn để viết bố trí XAML cho mỗi định hướng hoặc tôi đi đúng, nhưng cách cứng? Không.
Cảm ơn!
Hmm. Điều đó nghe có vẻ tốt, nhưng trong mã của tôi, nơi tôi phải xử lý nội dung được chọn của một số GridView, tôi nên làm một cái gì đó như 'if (portrait) {handle_my_gridview_portrait(); } else {handle_my_gridview_landscape(); } '. Dù sao, nó tốt hơn so với giải pháp hiện tại của tôi. Cảm ơn! –
Các mẫu ở trên chỉ cho thấy cách bạn có thể phát hiện sự thay đổi hướng khác nhau. Tuy nhiên, bạn có thể thay đổi giá trị trong DataContext và sử dụng Binding để tránh code-behind. – kimsk
Cả hai câu trả lời cho câu hỏi này đều tốt, nhưng câu trả lời của bạn phù hợp hơn với vấn đề của tôi. Cảm ơn và xin lỗi vì sự chậm trễ! –