DataGrid使用WrapPanel作为ItemsPanel

时间:2014-09-29 15:55:58

标签: c# wpf xaml datagrid itemspanel

如何实现纵向WrapPanel作为DataGrid' s ItemsPanelDataGrid将不是在高度上扩展,而是水平地分成另一列(带有标题和全部)。 我的问题类似于此帖子How to make DataGrid work with WrapPanel?

上的示例2

举个例子。如果所有行都不适合高度,则下一行开始于下一列

|H1   | H2   |   |H1   |H2    | 
--------------   --------------
|A1   | B1   |   |A5   |B5    |
--------------   --------------
|A2   | B2   |   |A6   |B6    |
--------------   --------------
|A3   | B3   |   |A7   |B7    |
--------------   --------------
|A4   | B4   |   |      |     |
--------------   --------------

如果数据网格的高度增加,那么

|H1   | H2   |   |H1   |H2    |
--------------   --------------
|A1   | B1   |   |A7   |B7    |
--------------   --------------
|A2   | B2   |   |     |      |
--------------   --------------
|A3   | B3   |   |     |      |
--------------   --------------
|A4   | B4   |   |     |      |
--------------   --------------
|A5   | B5   |   |     |      |
--------------   --------------
|A6   | B6   |   |     |      |
--------------   --------------

目前

我设法让它进入下一栏

<DataGrid ItemsSource="{Binding Path=Items}">
    <DataGrid.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel MaxHeight="500" Orientation="Vertical" IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </DataGrid.ItemsPanel>
    <DataGrid.Columns>
        <DataGridTextColumn Header="No." Binding="{Binding Item1}" />
        <DataGridCheckBoxColumn Header="A" Binding="{Binding Item2}" />
        <DataGridCheckBoxColumn Header="B" Binding="{Binding Item3}" />
        <DataGridCheckBoxColumn Header="C" Binding="{Binding Item4}" />
        <DataGridCheckBoxColumn Header="D" Binding="{Binding Item5}" />
        <DataGridTextColumn Binding="{x:Null}" />
    </DataGrid.Columns>
</DataGrid>

我已经禁用了代码中的标题,因为我无法重复下一列并添加空列,因为当下一列中的行再次开始时,我无法获得边距。< / p>

当网格不需要水平滚动时,这种方法很好(除了上述原因)。但是当网格需要水平滚动时,每列开始滚动并消失到左侧

不滚动时 Normally without scrolling

滚动时 enter image description here

1 个答案:

答案 0 :(得分:0)

我知道现在回答这个问题已经很晚了。 (已经是 6 年前的事了,哈哈) 希望我能理解你的问题,这是第一次在这里回答~

当我使用您的代码进行测试时,我在左右滚动时遇到了同样的问题。我的解决方案是在数据网格之外添加一层列表视图。 如果我们使用datagrid自带的滚动条,而datagrid的设置不够好,视图会混淆用户。

所以,在datagrid的外层添加一个listview可以帮助解决滚动问题,因为listview不限制内容的大小,所以datagrid不会强制出现自己的滚动条。

<ListView Grid.Row="0" HorizontalAlignment="Center">
    <DataGrid Name="dtGrid" ItemsSource="{Binding DtGridData}" AutoGenerateColumns="False" BorderBrush="Blue" BorderThickness="5" HeadersVisibility="Column">
        
        <DataGrid.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel MaxHeight="300" Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </DataGrid.ItemsPanel>
        
        
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name"
                            Binding="{Binding Custname}"
                            Width="100">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" 
                            Value="BlanchedAlmond" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>

            <DataGridTextColumn Header="Mobile NO"
                            Binding="{Binding Mobileno}"
                            Width="100"
                            FontFamily="Times New Roman" >
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" 
                            Value="MistyRose" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="Credit"
                            Binding="{Binding Credit}"
                            Width="100"
                            FontFamily="Times New Roman" >
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" 
                            Value="Honeydew" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
    </ListView>

下图显示当窗口变小时,列表视图的滚动条会出现,但数据网格的滚动条不会出现。

result

希望这会有所帮助,老实说,您将 wrappanel 添加到 itempanel 的想法可以挽救我的生命。谢谢哈!