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
в стековой панели?