2

对于分组数据源,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>

谢谢。

4

3 回答 3

0

而不是修改样式(目前这很不方便,因为没有办法只修改部分样式并将默认主题样式应用于控件的其余部分),我之前也使用 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 更改为您想要的容器。

于 2014-01-21T16:50:29.570 回答
0

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

于 2012-12-22T23:51:41.950 回答
0

我处理这种情况的方法是将 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>

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

于 2013-04-28T17:25:36.353 回答