【问题标题】:Gridview Header PlacementGridview 标题放置
【发布时间】:2012-12-21 09:00:38
【问题描述】:

对于分组数据源,HeaderTemplate 位于 GroupStyle.ContainerStyle 下,容器由两行组成,一行用于表头,另一行用于项目。

GridView.HeaderTemplate 似乎并非如此。标题显示在项目的左侧,如下所示:

标题文本 [第 1 项]

有没有办法将标题文本移到项目列表上方?我假设必须更改似乎无法访问的 GridView 模板本身。

这是 GridView 的 XAML。这很简单:

<GridView x:Name="gridItems" ItemContainerStyle="{StaticResource GridViewListContainerStyle}" ItemsSource="{Binding Items}" SelectionMode="None" AllowDrop="True" CanDragItems="True" VerticalAlignment="Top" HorizontalAlignment="Center"  CanReorderItems="True" Padding="1">
        <GridView.HeaderTemplate>
            <DataTemplate>
                <Grid>
                   <TextBox Text="{Binding Title}" Width="290" MaxLength="20"/>                                                            
                </Grid>
            </DataTemplate>
        </GridView.HeaderTemplate>
        <GridView.ItemTemplate>
            <DataTemplate>
                <local:MyControl DataContext="{Binding}"/>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

谢谢。

【问题讨论】:

  • 能否请您发布您的gridview的xaml。
  • 感谢您更新它 - 您能否也展示一下您的项目容器样式。出了点问题,因为它不应该按照您的描述进行操作!
  • 其实那个样式只是默认的。我只是创建了默认模板的副本而没有修改它。 @Ross Dargan 根据MSDN,这是默认行为:“默认情况下,ListView 的标题显示在顶部,GridView 的标题显示在左侧”。

标签: gridview windows-runtime winrt-xaml


【解决方案1】:

实际上,我想通了。它比我想象的要简单得多:只需创建一个用户控件并将标题添加到 Grid 中的另一个控件中。

【讨论】:

    【解决方案2】:

    我处理这种情况的方法是将 GridView 封装在具有垂直方向的 StackPanel 中,并在其顶部添加一个 Grid,该 Grid 具有一个 TextBlock,其 text 属性设置为 Header 文本。示例 XAML 如下所示:

    <StackPanel Orientation="Vertical">
        <Grid>
            <TextBlock Text="My Header Text"/>
        </Grid>
        <GridView x:Name="GridViewName"
            Grid.Row="1" 
                Height="500" 
                SelectionMode="None" 
                IsItemClickEnabled="True" 
                ItemClick="GVItem_Click" 
                ItemTemplate="{StaticResource ItemTemplate}">
        </GridView>
    </StackPanel>
    

    希望这可以帮助并节省我浪费时间敲打头的时间:)

    【讨论】:

      【解决方案3】:

      除了修改样式(目前这很不方便,因为无法只修改部分样式并将默认主题样式应用于控件的其余部分),我之前也使用 StackPanel 完成了此操作。后来我尝试了这种方法,它也有效,我不确定它有多好,但它确实允许您将标题保留在 gridview 控件中。

      注意 HeaderTemplate 和 ItemPanelTemplate 的边距:

      <GridView.HeaderTemplate>
          <DataTemplate>
              <TextBlock
                  Text="Header"
                  VerticalAlignment="Top"
                  Margin="10,10,-200,0"
                  />
          </DataTemplate>
          </GridView.HeaderTemplate>
              <GridView.ItemsPanel>
                  <ItemsPanelTemplate>
                      <VariableSizedWrapGrid Margin="0,50,0,0"/>
                          </ItemsPanelTemplate>
               </GridView.ItemsPanel>
            ....
          </GridView>
      

      您可以调整 HeaderTemplate 和 ItemsPanelTemplate 的边距,使其适合您的需要。您还可以将 VariableSizedWrapGrid 更改为您想要的容器..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多