如何实现纵向WrapPanel
作为DataGrid
' s ItemsPanel
?
DataGrid
将不是在高度上扩展,而是水平地分成另一列(带有标题和全部)。
我的问题类似于此帖子How to make DataGrid work with WrapPanel?
举个例子。如果所有行都不适合高度,则下一行开始于下一列
|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>
当网格不需要水平滚动时,这种方法很好(除了上述原因)。但是当网格需要水平滚动时,每列开始滚动并消失到左侧
不滚动时
滚动时
答案 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>
下图显示当窗口变小时,列表视图的滚动条会出现,但数据网格的滚动条不会出现。
希望这会有所帮助,老实说,您将 wrappanel 添加到 itempanel 的想法可以挽救我的生命。谢谢哈!