2

有没有办法在 XAML 中纯粹以声明方式定义 GridView?我看到的每个示例都在后面的代码中定义了类别/组名称值,然后每个项目都有一个标题/副标题。我真的很想找到一种方法来执行以下操作:

<GridView
  x:Name="itemGridView"
  AutomationProperties.AutomationId="ItemGridView"
  AutomationProperties.Name="Grouped Items"
  Grid.Row="1"
  Margin="0,-3,0,0"
  Padding="116,0,40,46"
  ItemTemplate="{StaticResource Standard250x250ItemTemplate}">

  <GridView.ItemsPanel>
    <ItemsPanelTemplate>                        
      <VirtualizingStackPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
  </GridView.ItemsPanel>

  <GridView.GroupStyle>
    <GroupStyle>
      <GroupStyle.HeaderTemplate>
        <DataTemplate>
          <Grid Margin="1,0,0,6">
            <Button
              AutomationProperties.Name="Group Title"
              Content="{Binding Tag}"
              Style="{StaticResource TextButtonStyle}"/>
          </Grid>
        </DataTemplate>
      </GroupStyle.HeaderTemplate>

      <GroupStyle.Panel>
        <ItemsPanelTemplate>
          <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/>
        </ItemsPanelTemplate>
      </GroupStyle.Panel>
    </GroupStyle>
  </GridView.GroupStyle>

  <GridView.Items>
    <Grid x:Name="tab1" Tag="Tab 1" AutomationProperties.Name="Group Title"    HorizontalAlignment="Left" Width="250" Height="250">
      <!-- Tab COntent -->
    </Grid>

    <Grid x:Name="tab2" Tag="Tab 2" AutomationProperties.Name="Tab 2" HorizontalAlignment="Left" Width="250" Height="250">
      <!-- Tab Content -->
    </Grid>
  </GridView.Items>
</GridView>

不幸的是,这个例子不起作用。我似乎无法弄清楚如何以声明方式设置组名称。感谢您的任何见解。

4

1 回答 1

0

我认为以下方法是自定义任何 Gridview 的好方法。

*如果您想在网格中实现多组样式,请执行以下操作:

步骤 1. 创建一个 GroupSelector 类并覆盖 SelectStyleCore 函数:

    public class GroupStyleSelector : StyleSelector
    {
    public Style GroupStyle1 { get; set; }
    public Style GroupStyle2 { get; set; }

    protected override Windows.UI.Xaml.Style SelectStyleCore(object item, Windows.UI.Xaml.DependencyObject container)
    {

        var viewGroup = item as ICollectionViewGroup;
        if (viewGroup != null)
        {
            //var groupModel = viewGroup.Group as YourGroupModel;
            if (condition1)
            {
                return GroupStyle1;
            }
            else if (condition2)
            {
                return GroupStyle2;
            }
        }
    }
}

步骤 2. 在 XAML 资源中,添加以下代码:

<Style x:Key="YourGroupStyle1" TargetType="GroupItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GroupItem">
               <!-- Add your custom layout here for Group style 1 -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
    <Style x:Key="YourGroupStyle2" TargetType="GroupItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GroupItem">
               <!-- Add your custom layout here for Group style 1 -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<customstyle:GroupStyleSelector x:Key="GroupStyleSelector"
                              GroupStyle1="{StaticResource GroupStyle1}"
                              GroupStyle2="{StaticResource GroupStyle2}"/>

customstyle 链接到存储 GroupStyleSelector 类的命名空间。

步骤 3. 为 GridView 控件应用样式选择器

如果您想自定义 HeaderTemplate,请告诉我,如果不是 Microsoft GridApp 示例的当前用户。

如果您想自定义组中的每个项目布局,您也可以与 GroupStyleSelector 类似:创建 DataTemplateSeletor(从 TemplateSelector 继承)然后将其分配给 GridView 控件

<GridView ItemTemplateSelector="{StaticResource ItemTemplateSelector}">
    <GridView.GroupStyle>
        <GroupStyle ContainerStyleSelector="{StaticResource GroupStyleSelector}">
            <GroupStyle.HeaderTemplate .../>
    </GridView.GroupStyle>

希望我的指南对您来说很清楚。如果有任何问题,请讨论。

于 2013-07-24T12:13:10.407 回答