我有一个包含4列的数据网格。前三个有Width="*"
,而最后一个有Width="*"
来填充剩余的空间。我不想要水平滚动条,所以我禁用了。
当程序调整到一定宽度时,会出现上述情况(只有最后一列的文本被包装)。这看起来还不错, 但是当你进一步减小窗口宽度时(其中没有任何空间来渲染右列),带有&www; wwwwwwwwwwwwwww的列...'仍然没有包装它的文本,一切都变成白色,因为右栏保持包裹到无限(无空间)。现在,我预计这个问题会通过向最右边的列引入最小宽度而消失,但是它会导致该列被渲染(部分或完全)在可见区域之外。
当我将第三列也作为Width="0.1*"
时,它的工作方式与预期有些不同,但这会导致最后一列的宽度显着下降(我不想要)。我试着用最小宽度将它设置为<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>
(或沿着这些线的任何东西),但我从数据网格中得到一个无穷大的异常。
这让我疯了,我没有找到出路来实现我的目标。简而言之,我想要的只是要包装到datagrid的可用宽度的列的文本。最后一列应该具有宽度偏好。
XAML:
{{1}}
答案 0 :(得分:0)
如果您不想要水平滚动条,并且听起来您希望第三列和第四列自动调整(并在必要时进行换行),则不要使用Width="Auto"
。在我看来,你需要一个固定的列宽,前两个(类似Width="100"
,然后第三和第四列分别使用Width="40*"
和Width="60*"
。(或将它们设置为您想要的任何比例。此外,您可以设置MinWidth
和/或MaxWidth
来控制列的扩展。
要启用换行,您只需向ElementStyle
添加DataGridTextColumn
。
<DataGrid>
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Check1" Binding="{Binding Check1}" Width="100" />
<DataGridCheckBoxColumn Header="Check2" Binding="{Binding Check2}" Width="100" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="40*" MaxWidth="200">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="60*" MinWidth="200">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>