在GridView中的每个组末尾显示广告

时间:2015-03-11 03:26:35

标签: c# gridview windows-store-apps winrt-xaml

我尝试过的事情:

创建一个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>

0 个答案:

没有答案