如何使用包装文本而不是截断文本的单元格获取WPF Datagrid?

问题描述 投票:42回答:4

使用包装文本而不是截断文本的单元格来获取WPF DataGrid必须做些什么?

现在,当文本较大且不适合列时,文本将被截断,用户无法看到值,因为DataGrid的IsReadOnly属性为true。我想要的是单元格中的文本被包装,单元格高度(NO CELL WIDTH)增加了显示所有文本所需的数量。

wpf datagrid word-wrap
4个回答
13
投票

您可以尝试使用启用了文本换行的TextBlock对单元格进行模板化。


93
投票

谢谢你的帮助@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>

22
投票

我做了类似于D.Rosados解决方案的东西。但是,如果您有更多需要包装的列,那么我的可重复使用。

<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>

0
投票

为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>
© www.soinside.com 2019 - 2024. All rights reserved.