【问题标题】:DataGrid work with WrapPanel as ItemsPanelDataGrid 使用 WrapPanel 作为 ItemsPanel
【发布时间】:2014-09-29 15:55:57
【问题描述】:

如何将垂直的WrapPanel 实现为DataGridItemsPanelDataGrid 不会在 height 中扩展,而是水平拆分为另一列(带有标题和全部)。 我的问题类似于此线程 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>

我已禁用代码中的标题,因为我无法让它在下一列重复,并添加了一个空列,因为当行在下一列重新开始时我无法获得边距。

当网格不需要水平滚动时,这可以正常工作(除了上述原因)。但是当网格需要水平滚动时,每一列都开始滚动并消失在左边

不滚动时

滚动时

【问题讨论】:

    标签: c# wpf xaml datagrid itemspanel


    【解决方案1】:

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

    当我使用您的代码进行测试时,左右滚动时遇到了同样的问题。我的解决方案是在datagrid之外加一层listview。 如果我们使用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>
    

    下图显示当窗口变小时,listview的滚动条会出现,但datagrid的滚动条不会出现。

    result

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多