我无法找到对我有帮助的解决方案。我意识到我想要的是我帖子中的最后一条评论。保持广告的旋转方向变化。
要实现这一点,可以使用 LayoutTransform,但是它们在 WP8 中不可用。最初我有浮动菜单,可以在旋转更改时打开和关闭,但在不同尺寸的屏幕上会很麻烦。
我发现的最干净的蛮力解决方案是制作 3x5(行主要)网格布局。我的主页位于最中心的网格中,广告紧邻左侧、右侧和底部。最后,最左侧和最右侧网格的两个填充空间:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto "/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid Grid.Row="1" Grid.Column="2">
<phone:Pivot x:Name="ContentPanel">
...
</phone:Pivot>
</Grid>
<Grid Name="AdBottom" Grid.Row="2" Grid.Column="2">
...
</Grid>
<Grid Name="AdRight" Grid.Row="1" Grid.Column="3" MaxWidth="80">
<adduplex:AdControl x:Name="adDuplexAdRight" AppId="?????"
RenderTransformOrigin="0.5,0.5"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="-200,0" Visibility="Collapsed">
<adduplex:AdControl.RenderTransform>
<CompositeTransform Rotation="90"/>
</adduplex:AdControl.RenderTransform>
</Grid>
<Grid Name="AdLeft" Grid.Row="1" Grid.Column="1" MaxWidth="80">
... <As Above, just negated>
</Grid>
<Grid Name="FillerLeft" Grid.Row="1" Grid.Column="0" MinWidth="80" Visibility="Collapsed">
</Grid>
<Grid Name="FillerRight" Grid.Row="1" Grid.Column="4" MinWidth="80" Visibility="Collapsed">
</Grid>
</Grid>
Filler 元素及其最小宽度的原因是为了帮助边距溢出。没有它,你可以使用 Rendertransform 来旋转元素,但是当你试图将它的容器强制缩小到你想要的大小时,它会出现错误。这是因为旋转发生在渲染之后,因此如果没有那些额外的填充列以允许溢出,则元素会在旋转时被切片。
因此,进行溢出并扩展广告的边距可以使其显示为锁定在网格中而不是浮动。然后我管理在 rotationchanged 事件上切换广告的可见性和填充区域。
这是我拥有的最简单的解决方案。其他人可以搜索合并 Silverlight LayoutTransformer,如此处所示。或者,如果使用付费工具包中的一个。到目前为止,这适用于我的简单应用程序。