1

パノラマ内に 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>
4

2 に答える 2

2

AdControl が表示されないのは、マージンの設定が原因です。あなたが持っている

Margin="0,720,0,0" 

これにより、コンテナの上部から 720 ピクセル下に AdControl が配置されます。この場合は、LayoutRoot グリッドではなくStackPanelです。

これは、AdControl が画面外にあることを意味します。

サンプル コードでは、マージンを次のように変更することで、一時的な修正を作成できます。

Margin="0,420,0,0" 

しかし、それは良い長期的な解決策ではありません。グリッド内の複数の行をドッキングまたは使用することを検討する必要があります。

リストボックスに歌詞を入力する場合は、別の考慮事項があります。TextWrapping を有効にしてテキストブロックを使用することを検討しましたか?

于 2011-11-12T07:42:14.447 に答える
1

Walt Ritscherが述べているように、が広告コントロールをページの下部から押し出している場合ListBox、オプションは、 trueに設定され、その中の要素の順序が逆になるDockPanel代わりに、それをラップすることです(最後に、したがって、を拡張して要求されたサイズ全体を占めるのではなく、DockPanelの残りのスペースを埋めます)。StackPanelLastChildFillListBoxStackPanel

つまり、次のようなものです。

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

これが発生する理由はListBox、コンテンツに合わせてサイズ自体を調整するためです(StackPanelこれにより、コンテンツを制限するのではなく、希望するサイズにすることができDockPanelます。この場合、Windowsでは、を追加しますがScrollViewer、電話で何をするかわからない)。

その場合は、切り捨てられListBoxAdControl下が表示されます。そうでない場合、AdControlそれがパノラマでそれ自体である場合、またはスタックパネルで上にある場合、ディスプレイは表示されListBoxますか?

于 2011-11-12T02:26:54.627 に答える