当在Silverlight / Wp7中单击时,如何从其容器中弹出控件以使其全屏显示?

时间:2011-08-16 20:07:40

标签: c# silverlight xaml windows-phone-7 controls

所以我有一个Panorama控件,并使用以下模板以编程方式将PanoramaItems添加到控件中。

<UserControl>
    <Grid x:Name="LayoutRoot">
            <controls:PanoramaItem Name="sitePanoramaItem" Header="{Binding Name}">
            <Controls:DockPanel VerticalAlignment="Stretch">
                <StackPanel Orientation="Horizontal" Margin="0,10,0,0" Controls:DockPanel.Dock="Top">
                    <Image Source="../Images/action.png" Width="64"  />
                    <TextBlock Text="{Binding Stats, Mode=TwoWay}" FontSize="45" Margin="15,0,0,0" />
                </StackPanel>
                <Grid x:Name="graphCanvas" HorizontalAlignment="Stretch" Margin="10,10,10,10">    </Grid>
            </Controls:DockPanel>
        </controls:PanoramaItem>
    </Grid>
</UserControl>

当我点击graphCanvas我想要做的是将graphCanvas弹出并显示全屏,然后当我再次点击将其恢复到原来的位置时。我一直在这个网站和谷歌,找不到任何类似于我正在寻找的东西。

我仍然希望保持全景控制功能,以便graphCanvas仍然是唯一可见的,但您可以循环浏览它们。目前我正在努力工作,我从DockPanel中删除了网格,并在LayoutRoot崩溃时将其直接放在sitePanoramaItem中。然而,它不是全屏,因为全景名称仍然可见(我想我也可以隐藏它......)当我把graphCanvas放回到他DockPanel时,画布的大小全都搞砸了起来。

我希望有一种更简单的方法。

甚至可能吗?

2 个答案:

答案 0 :(得分:2)

可以创建您描述的UI,但这并不简单。你在正确的轨道上,在代码中删除它并添加LayoutRoot并隐藏Panorama。但是你必须自己编写滚动行为的代码,这将非常棘手 - 特别是让它感觉到全景的方式。

您可以尝试的一个技巧实际上是在您的Panorama顶部层叠一个PivotControl并默认情况下将其折叠。同时编辑它的模板以删除所有默认内容,例如:删除标题控件,将边距设置为0等。然后,当您想要全屏显示时,可以从Panorama项中删除所有graphCanvases,并将它们添加到PivotControl中的新PivotItems。然后隐藏全景并显示数据透视表。这将为您提供免费的滚动功能和全屏幻觉。

说完所有我不确定我会推荐这个。更常见的方法是,当用户选择项目并处理其中的全屏方面时,可以简单地导航到另一个页面(可能再次使用Pivot控件进行滚动)。当您想要离开“全屏”模式时,只需返回第一页即可。使用这种方法可以更轻松地处理全屏状态的墓碑化。

答案 1 :(得分:1)

您可以尝试将graphCanvas设为一个页面并将其放在不同的XAML中。然后在您现在拥有graphCanvas的相同位置添加一个框架(例如将其命名为InnerFrame),并使用InnerFrame导航到该页面。单击框架后,您可以使用应用程序的RootFrame导航到graphCanvas页面。当您决定关闭它时,只需使用RootFrame导航回来。

希望它足够清楚:)

修改 WP7中的导航与Silverlight 4中的标准导航非常相似,但它的限制性更强。只需在您的XAML中抛出一个PhoneApplicationFrame,就像这样:

<phone:PhoneApplicationFrame x:Name="Frame" />

这与Silverlight框架基本相同。默认情况下,您创建的所有页面都从PhoneApplicationPage继承,因此它们可以在框架中显示而无需任何更改。

您的整个应用程序实际上都在PhoneApplicationFrame上运行。如果您查看App类,您将看到:

public PhoneApplicationFrame RootFrame { get; private set; }

Here's the MSDN documentation for the navigation system on WP7