我有一个包含4列的数据网格 . 前三个有 Width="Auto"
,而最后一个有 Width="*"
来填补剩余空间 . 我不想要水平滚动条,所以我禁用了 .
当程序调整到一定的宽度时,会发生上述情况(只有最后一列的文本被包装) . 这看起来并不那么糟糕,但是当你减少窗口宽度时(其中没有任何空间来渲染右列),带有'wwwwwwwwwwwwwww ...'的列仍然不会包装它文本和所有内容都变为白色,因为右列保持包装到无限(无空间) . 现在,我预计这个问题会通过向最右边的列引入最小宽度而消失,但是它会导致该列在可见区域之外(部分或完全)呈现 .
当我将第三列也作为 Width="*"
时,它会像预期的那样工作,但这会导致最后一列的宽度显着下降(我不想要) . 我试着用最小宽度将它设置为 Width="0.1*"
(或沿着这些线的任何东西),但是我从数据网格中获得了一个无穷大的异常 .
这让我疯了,我没有看到一条出路来实现我的目标 . 简而言之,我想要的只是要包装到datagrid可用宽度的列的文本 . 最后一列应具有宽度首选项 .
XAML:
<DataGrid Grid.Row="0" Grid.Column="1" IsEnabled="{Binding HasValidSelectedItem}" ItemsSource="{Binding Items, IsAsync=True}" AutoGenerateColumns="False"
SnapsToDevicePixels="True" EnableColumnVirtualization="False" HorizontalAlignment="Stretch" CanUserAddRows="False" CanUserDeleteRows="False"
CanUserResizeRows="False" HorizontalScrollBarVisibility="Disabled" >
<DataGrid.Resources>
<Style TargetType="CheckBox" BasedOn="{StaticResource CenteredCheckBoxStyle}" x:Key="CenteredReadOnlyCheckBoxStyle">
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="Focusable" Value="False"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Test First"
Binding="{Binding First, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" ElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}"
EditingElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}" >
</DataGridCheckBoxColumn>
<DataGridCheckBoxColumn Header="Test Second"
Binding="{Binding Second, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" ElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}"
EditingElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}" />
<DataGridTextColumn Header="Test Third" Binding="{Binding Third}"
EditingElementStyle="{StaticResource DataGridEditingTextBoxStyle}" CellStyle="{StaticResource DataGridToolTipDataGridCellStyle}">
<DataGridTextColumn.ElementStyle>
<Style BasedOn="{StaticResource DataGridTextBlockStyle}" TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="Padding" Value="0,6"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Test Fourth" Width="*" IsReadOnly="True" Binding="{Binding Path=Fourth}"
EditingElementStyle="{StaticResource DataGridEditingTextBoxStyle}" CellStyle="{StaticResource DataGridToolTipDataGridCellStyle}">
<DataGridTextColumn.ElementStyle>
<Style BasedOn="{StaticResource DataGridTextBlockStyle}" TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="Padding" Value="0,6"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
1 回答
如果你不't want a horizontal scrollbar, and it sounds like you want the third and fourth columns to autosize (and wrap if necessary), then don' t使用
Width="Auto"
. 在我看来,你想要前两个固定的列宽(类似于Width="100"
,然后第三和第四列分别使用Width="40*"
和Width="60*"
. )或者将它们设置为你想要的任何比例 . 此外,你可以设置MinWidth
和/或MaxWidth
来控制列的扩展 .要启用包装,您只需要将
ElementStyle
添加到DataGridTextColumn
.