WP7 - позиционирование AdControl - PullRequest
1 голос
/ 12 ноября 2011

Есть ли простой способ разместить 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 ]

2 голосов
/ 12 ноября 2011

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

Margin="0,720,0,0" 

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

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

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

Margin="0,420,0,0" 

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

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

1 голос
/ 12 ноября 2011

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

То есть, что-то вроде этого:

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

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

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

...