在删除广告时调整StackPanel的大小以适应屏幕

时间:2014-08-15 21:47:55

标签: xaml windows-phone-8 user-controls

我有一个Windows Phone 8应用,其屏幕底部有广告。

当我删除广告时,我希望将其占用的区域替换为游戏屏幕内容。我已经搜索了这个,但还没有找到解决方案,我确信这是我错过的一些简单的事情!

作为示例,请参阅以下代码:

<!--Panorama item one-->
<phone:PanoramaItem Header="Level Stastics">
    <Grid Margin="0,0,0,88"  >
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel Height="Auto" Grid.Row="0" Margin="0,0,0,-30" >
            <Button x:Name="button1" Content="Click Me" Click="button1_Click"/>
            <Button Content="last Button remove" Click="Button_Click"/>
            <Button Content="Button"/>
            <Button Content="Button"/>
            <Button Content="Button"/>
            <Button Content="Button"/>
            <Button Content="Button"/>
            <Button x:Name="last" Content="last Button"/>
        </StackPanel>
    </Grid>
</phone:PanoramaItem>

(不是我的实际代码,只是一个示例,看看如何删除组件以填充留下的空间)

当我单击button1时,它会删除最后一个按钮,但不会调整剩余按钮的大小以占用空间。 on_click方法将按钮的可见性设置为Collapsed。我以为这把它从视觉树中删除了?

我想要的是让游戏区域(我有2个,一个肖像和一个全景页面)充满控件和屏幕底部的区域作为广告空间(480x80) 。当用户购买完整产品时,广告被移除,并且广告上方的游戏空间占据整个屏幕空间并自行调整大小。这可能吗?

1 个答案:

答案 0 :(得分:1)

这里有两点需要注意:

  1. StackPanel位于网格的第一行,其高度为“自动”。当它处于“自动”状态时,它不允许其内容使用剩余空间。它只是为内容的高度提供空间。不仅如此。因此,将Row的高度设为*并将第二个Row的高度设置为auto(如果不使用则将其删除)。如果第2行未设置为auto,则两行将共享相等的空格/高度。

  2. StackPanel不会将其内容传播到所有可用空间。它类似于Grid“auto”。因此,将其替换为Grid并添加除了最后一行之外具有*作为高度的行。最后一行的高度应该是自动的,因为它必须折叠(*总是为行分配空间的百分比)。

  3. 试试这个:

    <Grid>
    
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    
    <Grid Height="Auto" Grid.Row="0" >
    
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>
    
        <Button Grid.Row="0" x:Name="button1" Content="Click Me" Click="button1_Click" />
        <Button Grid.Row="1" Content="last Button remove" Click="Button_Click" />
        <Button Grid.Row="2" Content="Button" />
        <Button  Grid.Row="3" Content="Button" />
        <Button Grid.Row="4" Content="Button" />
        <Button Grid.Row="5" Content="Button" />
        <Button Grid.Row="6" Content="Button" />
        <Button Grid.Row="7" x:Name="last" Content="last Button" />
    
    </Grid>
    

    希望这会有所帮助。享受编码:)