可以說我在每個單元格內有一個2行,2列和許多控件的網格。如何檢測方向更改和更改佈局?
當應用程序更改爲快照模式時,我的意思是1/3的屏幕我希望應用程序只有一列,2行,並且只顯示我決定的一些控件。
我對此有什麼樣的控制?
THX
可以說我在每個單元格內有一個2行,2列和許多控件的網格。如何檢測方向更改和更改佈局?
當應用程序更改爲快照模式時,我的意思是1/3的屏幕我希望應用程序只有一列,2行,並且只顯示我決定的一些控件。
我對此有什麼樣的控制?
THX
你應該利用VisualStateManager的XAML中,一個完整的解決方案的XAML:
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OrientationStates">
<VisualState x:Name="Full"/>
<VisualState x:Name="Fill"/>
<VisualState x:Name="Portrait"/>
<VisualState x:Name="Snapped"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
創建每個的VisualState和隱藏/顯示元素在你的XAML的故事板。 Microsoft示例使用相同的解決方案。
-
更新
我搜索網,發現正確的狀態,一個例子是此鏈接背後:MSDN。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ApplicationViewStates">
<VisualState x:Name="FullScreenLandscape"/>
<VisualState x:Name="Filled"/>
<VisualState x:Name="FullScreenPortrait"/>
<VisualState x:Name="Snapped"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
這些州反映了ApplicationViewState枚舉。更多的信息可以在here找到。
對DisplayProperties.OrientationChanged
- 活動一起來看看。當它觸發時,您可以修改網格並重新排列控件。
使用DisplayProperties.OrientationChanged事件(由@Jan K.所建議的)可能不正是你所尋找的,考慮的註釋部分到此事件:
的DisplayProperties.OrientationChanged事件時纔會發生顯示器或顯示器的方向發生變化,而不一定在應用程序的方向發生變化時。要確定您的應用程序的佈局目的方向,請使用ApplicationView.Value屬性。
但由於ApplicationView.Value可能會後的Windows 8.1發佈 MS建議使用ApplicationView.GetForCurrentView(拋棄)代替:
ApplicationView靜態方法可以Windows後更改或不可用的版本8.1預覽。而是使用ApplicationView.GetForCurrentView()來獲取ApplicationView的一個實例。
所以現在我已經結束了與代碼(有一種動態的觀點,並且無法通過VisualStateManager在XAML預先設計的一切,不幸):
public MainPage()
{
InitializeComponent();
Window.Current.SizeChanged += (sender, args) =>
{
ApplicationView currentView = ApplicationView.GetForCurrentView();
if (currentView.Orientation == ApplicationViewOrientation.Landscape)
{
// when args.Size.Width > args.Size.Height
}
else if (currentView.Orientation == ApplicationViewOrientation.Portrait)
{
// when args.Size.Width < args.Size.Height
}
};
}
能否請您詳細說明您的答案更多?,在您的幫助下,我可以獲得此鏈接,http://www.markermetro.com/2011/11/technical/windows-8-metro-style-apps-layout-and-orientation-management-with- xaml /,所以這意味着我必須爲每個可視狀態編寫不同的佈局,並根據狀態將每個方向更改的數據重新綁定到正確的控件? –
是的!這確實是最好的,只有xaml,解決方案afaik。你可以用一些聰明的故事板重用你的一些元素,但你大多需要創建不同的佈局。如果你這樣做,將它們轉移到單獨的用戶控件或視圖幷包含它們可能是明智的。 – Kolky
對不起,我有點狹隘。微軟創建了一個支持這些VisualState的基本頁面類。我用一個更有用的例子更新了我的文章... – Kolky