Xaml 如何检测方向变化和布局变化?

Xaml 如何检测方向变化和布局变化?,xaml,windows-8,windows-runtime,microsoft-metro,Xaml,Windows 8,Windows Runtime,Microsoft Metro,假设我有一个网格,每个单元格内有两行、两列和许多控件 当应用程序更改为快照模式时,我的意思是我希望应用程序只显示屏幕的1/3,一列,两行,并且只显示我决定的一些控件 我对此有什么样的控制 thx看一下-事件。当它触发时,您可以修改网格并重新排列控件。您应该使用xaml中的VisualStateManager,以获得完整的xaml解决方案: 为每个VisualState创建故事板,并在xaml中隐藏/显示元素。Microsoft示例使用相同的解决方案 -- 更新 我搜索了网络,找到了正确的状态

假设我有一个网格,每个单元格内有两行、两列和许多控件

当应用程序更改为快照模式时,我的意思是我希望应用程序只显示屏幕的1/3,一列,两行,并且只显示我决定的一些控件

我对此有什么样的控制


thx

看一下-事件。当它触发时,您可以修改网格并重新排列控件。

您应该使用xaml中的VisualStateManager,以获得完整的xaml解决方案:


为每个VisualState创建故事板,并在xaml中隐藏/显示元素。Microsoft示例使用相同的解决方案

--

更新

我搜索了网络,找到了正确的状态,链接后面有一个例子:


状态反映枚举。甚至可以找到更多信息。

考虑到此事件的备注部分,使用事件(如@Jan K所建议的)可能并不完全是您想要的:

DisplayProperties.OrientionChanged事件仅在显示器或监视器的方向改变时发生,而不一定在应用程序的方向改变时发生。要出于布局目的确定应用程序的方向,请使用属性

但由于Windows 8.1发布后可能会被放弃,MS建议使用ApplicationView.GetForCurrentView()

对于Windows 8.1预览版之后的版本,ApplicationView静态方法可能会被更改或不可用。相反,使用获取ApplicationView的实例

因此,现在我已经完成了这段代码(很遗憾,我有一种动态视图,无法通过VisualStateManager在XAML中预先设计所有内容):

public主页()
{
初始化组件();
Window.Current.SizeChanged+=(发送方,参数)=>
{
ApplicationView currentView=ApplicationView.GetForCurrentView();
if(currentView.Orientation==ApplicationViewOrientation.横向)
{
//当args.Size.Width>args.Size.Height时
}
else if(currentView.Orientation==ApplicationViewOrientation.Grait)
{
//当args.Size.Width
请详细说明您的答案好吗?在您的帮助下,我可以获得此链接,因此这意味着我必须为每个视觉状态编写不同的布局,并根据状态将每个方向更改上的数据重新绑定到正确的控件?是!这确实是最好的解决方案,仅限xaml。您可以使用一些巧妙的故事板重用一些元素,但您必须创建不同的布局。如果你这样做了,最好将它们转移到单独的用户控件或视图中,并包含它们。对不起,我有点心胸狭窄。Microsoft创建了一个支持这些可视状态的基页类。我用一个更有用的例子更新了我的帖子。。。
 <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>