是否有一种简单的方法可以将AdControl定位在Panorama内?现在,如果我像这样设置对象树,我只能显示我的AdControl:
Layout Root > Panorama > ...
> AdControl1
也就是说,我的Panorama和我的AdControl都是LayoutRoot的直接子项。
我只想在第一个PanoramaItem上显示我的AdControl,但是当我这样做时,它无法渲染:
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>
答案 0 :(得分:2)
您无法看到AdControl的原因是您的保证金设置。
Margin="0,720,0,0"
将AdControl 720像素从其容器顶部向下放置,在这种情况下是 StackPanel ,而不是LayoutRoot网格。
这意味着AdControl不在屏幕上。
在示例代码中,您可以通过将边距更改为类似的内容来创建临时修复。
Margin="0,420,0,0"
但这不是一个好的长期解决方案。您应该考虑在网格中对接或使用多行。
另一个考虑因素,如果您使用歌词填充列表框。您是否考虑过使用启用了TextWrapping的文本块?
答案 1 :(得分:1)
如果ListBox
正在按照Walt Ritscher的说法将广告控件推离页面底部,则可以选择将其包装在DockPanel
而不是StackPanel
中将LastChildFill
设置为true并将其中元素的顺序反转(以便ListBox
为最后一个,因此填充DockPanel的剩余空间而不是扩展StackPanel
以占用它满足要求的尺寸。)
就是这样:
<DockPanel LastChildFill="True" ...>
<my:AdControl/>
<ListBox/>
</DockPanel>
可能发生这种情况的原因是ListBox
会根据内容调整自身的大小(而StackPanel
可以使其符合其希望的大小,而不是DockPanel
会限制它 - 在这种情况下,在Windows上你添加ScrollViewer
,但我不确定你为手机做了什么。
如果是这种情况,您应该会看到截断的ListBox
和AdControl
。如果没有,AdControl
是否会在全景图中显示,或者在堆叠面板中的ListBox
上方显示?