WP7 - позиционирование AdControl

Есть ли простой способ разместить AdControl внутри Панорамы? Прямо сейчас я могу только показать свой AdControl, если настрою дерево объектов следующим образом:

Layout Root > Panorama > ...
            > AdControl1

То есть, и моя Panorama, и мой AdControl являются непосредственными потомками LayoutRoot.

Я хочу показать свой AdControl только на первом PanoramaItem, но при этом он не отображается:

LayoutRoot > Panorama > PanoramaItem > StackPanel > ListBox
                                                  > AdControl

То есть я хочу, чтобы мой AdControl находился под моим ListBox, привязанным только к нижней части этого PanoramaItem. Что мне не хватает?

РЕДАКТИРОВАТЬ: XAML, дополнительные PanoramaItems опущены

За работой

<!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">

        <!--Panorama control-->
        <controls:Panorama Title="bad religion">
            <controls:Panorama.Background>
                <ImageBrush ImageSource="PanoramaBackground.png"/>
            </controls:Panorama.Background>

            <!--Panorama item one-->
            <controls:PanoramaItem Header="content">
                <!--Double line list with text wrapping-->
                <ListBox x:Name="LyricsListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="LyricsListBox_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                                <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PanoramaItem>
        </controls:Panorama>
        <my:AdControl AdUnitId="TextAd" ApplicationId="test_client" Height="80" HorizontalAlignment="Left" Margin="0,720,0,0" Name="adControl1" VerticalAlignment="Top" Width="480" />
    </Grid>

Не работает

 <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">

        <!--Panorama control-->
        <controls:Panorama Title="bad religion">
            <controls:Panorama.Background>
                <ImageBrush ImageSource="PanoramaBackground.png"/>
            </controls:Panorama.Background>

            <!--Panorama item one-->
            <controls:PanoramaItem Header="content">
                <StackPanel>
                    <!--Double line list with text wrapping-->
                    <ListBox x:Name="LyricsListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="LyricsListBox_SelectionChanged">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                                    <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                    <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                    <my:AdControl AdUnitId="TextAd" ApplicationId="test_client" Height="80" HorizontalAlignment="Left" Margin="0,720,0,0" Name="adControl1" VerticalAlignment="Top" Width="480" />
                </StackPanel>
            </controls:PanoramaItem>
        </controls:Panorama>        
    </Grid>

2 ответа

Решение

Причина, по которой вы не видите AdControl, связана с настройками маржи. У тебя есть

Margin="0,720,0,0" 

Это помещает AdControl 720 пикселей вниз от верхней части его контейнера, который в данном случае является StackPanel, а не сеткой LayoutRoot.

Это означает, что AdControl выключен.

В своем примере кода вы можете создать временное исправление, изменив поле на что-то вроде.

Margin="0,420,0,0" 

но это не хорошее долгосрочное решение. Вы должны рассмотреть возможность стыковки или использования нескольких строк в сетке.

Еще одно соображение, если вы заполняете список со словами. Рассматривали ли вы использование текстового блока с включенным TextWrapping?

Если ListBox толкает контроль над рекламой внизу страницы, как утверждает Уолт Ритчер, можно было бы обернуть его в DockPanel вместо StackPanel с LastChildFill установить в true и порядок элементов в нем инвертирован (так что ListBox является последним и, следовательно, заполняет оставшееся пространство DockPanel вместо расширения StackPanel занять его полный размер).

То есть как то так:

<DockPanel LastChildFill="True" ...>
   <my:AdControl/>
   <ListBox/>
</DockPanel>

Причина, по которой это может происходить, заключается в том, что ListBox размеры сами, чтобы соответствовать содержанию (и StackPanel позволяет ему быть любого размера, который он хочет, в отличие от DockPanel что ограничит его - в этом случае в Windows вы добавите ScrollViewer, но я не уверен, что вы сделали бы для телефона).

Если это так, вы должны увидеть усеченный ListBox и AdControl под. Если нет, то AdControl отображать, если он сам по себе в панораме или над ListBox в стековой панели?

Другие вопросы по тегам