我尝试过的事情:
创建一个GroupStyle选择器,它将根据组类型提供不同的样式,但组对象和级别分别为null和0。,我能够获得组对象铸造是恰当的,但Panel和ItemTemplates不会改变。他们使用正常组样式的面板和itemtemplate
public class GridViewGroupStyleSelector : GroupStyleSelector
{
public GroupStyle normalGroupStyle { get; set; }
public GroupStyle adGroupStyle { get; set; }
protected override GroupStyle SelectGroupStyleCore(object group, uint level)
{
var groupObj = group as Windows.UI.Xaml.Data.ICollectionViewGroup;
if (groupObj != null && groupObj.Group != null)
{
var contentGroup = groupObj.Group as ContentGroupItem;
if (contentGroup != null)
{
if (contentGroup.IsAdGroup)
return adGroupStyle;
}
}
return normalGroupStyle;
}
}
public class ViewTemplateSelector : DataTemplateSelector
{
public DataTemplate OcdIconViewTemplate { get; set; }
public DataTemplate OcdThumbnailViewTemplate { get; set; }
public DataTemplate OcdAdGridViewTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var content = item as Content;
if (content != null && content.IsAnAd)
{
return OcdAdGridViewTemplate;
}
if (Utilities.GridviewItemStyle == GridviewItemStyle.IconStyle)
return OcdIconViewTemplate;
else
return OcdThumbnailViewTemplate;
}
}
public virtual void InjectAds()
{
if (PageData != null && PageData.Count > 0) // && Utilities.GridviewItemStyle == GridviewItemStyle.ThumbnailStyle
{
for(int i=0;i<PageData.Count;i++ )
{
if (i % 2 != 0)
{
var adGroup = new ContentGroupItem();
adGroup.IsAdGroup = true;
adGroup.Contents.Add(new Content() { IsAnAd = true });
PageData.Insert(i, adGroup);
}
}
}
}
<Style x:Key="mainGridViewStyle" TargetType="GridView">
<Setter Property="AutomationProperties.AutomationId" Value="ItemsGridView" />
<Setter Property="ItemTemplateSelector" Value="{StaticResource gridViewTemplateSelector}" />
<Setter Property="GroupStyleSelector" Value="{StaticResource gridViewGroupStyleSelector}" />
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<ItemsWrapGrid GroupPadding="0,0,80,0" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
<views:GridViewGroupStyleSelector x:Key="gridViewGroupStyleSelector"
normalGroupStyle="{StaticResource gridViewGroupStyle}"
adGroupStyle="{StaticResource gridViewAdGroupStyle}" />
<GroupStyle x:Key="gridViewGroupStyle" HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid x:Name="headerGrid">
<Button x:Name="headerButton" Style="{StaticResource OcdHeaderButtonStyle}"
BorderThickness="1"
Command="{Binding DataContext.HeaderCommand, ElementName=pageRoot}"
IsRightTapEnabled="False"
IsHoldingEnabled="False"
IsDoubleTapEnabled="False"
CommandParameter="{Binding HeaderIdentifier}">
<TextBlock Style="{StaticResource SubheaderTextBlockStyle}" Text="{Binding HeaderIdentifier, Converter={StaticResource HeaderNameConvertor},FallbackValue='Header >'}" />
</Button>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
<GroupStyle x:Key="gridViewAdGroupStyle" HidesIfEmpty="False">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Advertisement" Foreground="Black" HorizontalAlignment="Left"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" Width="300" Height="750">
</StackPanel>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>