我在我的 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>