1

我在我的 Windows 应用商店应用程序中使用了一个高度动态的 GridView。GridView 中的元素可以有不同的模板和大小,具体取决于我在 DataSource 中插入的内容。例如:

<GridView
    ItemsSource="{Binding Featured}" 
    ItemTemplate="{StaticResource MovieSelectingTemplate}"
    ItemsPanel="{StaticResource FluidMovieGridItemTemplate}"
    ItemContainerStyleSelector="{StaticResource VariableSizedMovieStyleSelector}"
/>

<DataTemplate x:Key="MovieSelectingTemplate">
    <TemplateSelectors:MovieTemplateSelector 
        Content="{Binding}"
        Default="{StaticResource DefaultMovieTemplate}"
        Featured="{StaticResource FeaturedMovieTemplate}"
        AD="{StaticResource ADMovieTemplate}"
        HorizontalAlignment="Stretch"/>
</DataTemplate>

<ItemsPanelTemplate x:Key="FluidMovieGridItemTemplate">
    <VariableSizedWrapGrid Orientation="Vertical" ItemWidth="1" ItemHeight="1"/>
</ItemsPanelTemplate>

<local:FeaturedGridMovieStyleSelector x:Key="VariableSizedMovieStyleSelector"
   NormalStyle="{StaticResource NormalMovieGridViewItemStyle}"
   ADStyle="{StaticResource ADMovieGridViewItemStyle}" 
   FeaturedStyle="{StaticResource FeaturedMovieGridViewItemStyle}"/>

应用程序是关于电影的,如您所见,我们可以有 3 种类型的模板:

  • 普通电影模板
  • 精选电影模板(2x3 正常电影尺寸)
  • AD 电影模板 - 用作在网格中插入添加的脚手架(2x1 正常电影大小)

MovieSelectingTemplate 根据 Movie 类中的枚举决定使用哪个模板。当我需要在网格中插入广告时,我只需使用 AD 模板创建空电影。我使用 Microsoft pubCenter 来投放广告。

问题是:pubCenter 提供的广告数量非常少,当没有广告时,我想用广告模板替换元素,用实际元素。但是我只能知道,一旦网格数据源形成,AD就无法使用,所以很难替换里面的任何东西。我该如何解决这个问题?

更新:

 <DataTemplate x:Name="ADMovieTemplate">
        <Grid>
            <Grid.Background>
                <ImageBrush ImageSource="Assets/logo-app-260x260.png" Stretch="UniformToFill"/>
            </Grid.Background>
            <UI:AdControl
                                  ApplicationId="{StaticResource AppId}" 
                                  AdUnitId="{StaticResource 250x250AdUnitId}"
                                  HorizontalAlignment="Right" 
                                  Height="250" 
                                  Margin="0" 
                                  VerticalAlignment="Top" 
                                  Width="250"
                            />
        </Grid>
    </DataTemplate>
4

0 回答 0