要获得一个包含换行而不是截断文本的单元格的WPF DataGrid,必须执行哪些操作?现在,当一个文本太大,不适合一个列时,文本会被截断,用户看不到它的值,因为DataGrid的IsReadOnly属性为true。我想要的是,单元格中的文本被换行,单元格高度(无单元格宽度)增加了显示所有文本所需的量。
eh57zj3b1#
谢谢你的帮助@H.B.,这对我来说很有用(对齐是可选的):
<DataGrid.Columns> <DataGridTextColumn Header="Wrapped & centered" Binding="{Binding field}"> <DataGridTextColumn.ElementStyle> <Style> <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> <Setter Property="TextBlock.TextAlignment" Value="Center"/> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> </DataGrid.Columns>
jdgnovmf2#
我做了一个类似D.Rosados溶液的东西。不过,如果你有更多的列需要 Package ,我的是可重用的。
<UserControl.Resources> <Style TargetType="{x:Type TextBlock}" x:Key="WrapText"> <Setter Property="TextWrapping" Value="Wrap"/> </Style> </UserControl.Resources> <DataGrid.Columns> <DataGridTextColumn IsReadOnly="False" Header="Address" Binding="{Binding Address}" ElementStyle="{StaticResource WrapText}" Width="150"/> </DataGrid.Columns>
zpf6vheq3#
您可以尝试使用启用文本换行的TextBlock来模板单元格。
TextBlock
uoifb46i4#
除了其他的解决办法外,这里还有另一个解决办法
<DataGridTemplateColumn Header="MyFieldName" Width="150" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding MyField}" TextWrapping="Wrap"> <TextBlock.ToolTip> <TextBlock Text="{Binding MyField}" /> </TextBlock.ToolTip> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
rqenqsqc5#
另一种为Editing和Text DataGrid列设置文本绕排的简单方法是指定Binding属性和TextWrapping属性,如下所示:
<DataGridTemplateColumn x:Name="ColumnName" Header="Column Header Goes Here"> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <TextBox Text="{Binding Path=DataBoundProperty, Mode=TwoWay}" TextWrapping="Wrap"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Path=DataBoundProperty, Mode=OneWay}" TextWrapping="Wrap"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
7gs2gvoe6#
对于WinUi 3,有一个小变化
<controls:DataGridTextColumn Width="*" Binding="{Binding Value}" Header="Value"> <controls:DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> <Setter Property="TextBlock.TextAlignment" Value="Left" /> </Style> </controls:DataGridTextColumn.ElementStyle> </controls:DataGridTextColumn>
需要Style TargetType,并且不再有x:Type,而是直接写入类型。
6条答案
按热度按时间eh57zj3b1#
谢谢你的帮助@H.B.,这对我来说很有用(对齐是可选的):
jdgnovmf2#
我做了一个类似D.Rosados溶液的东西。不过,如果你有更多的列需要 Package ,我的是可重用的。
zpf6vheq3#
您可以尝试使用启用文本换行的
TextBlock
来模板单元格。uoifb46i4#
除了其他的解决办法外,这里还有另一个解决办法
rqenqsqc5#
另一种为Editing和Text DataGrid列设置文本绕排的简单方法是指定Binding属性和TextWrapping属性,如下所示:
7gs2gvoe6#
对于WinUi 3,有一个小变化
需要Style TargetType,并且不再有x:Type,而是直接写入类型。