Как получить WPF Datagrid с ячейками, которые переносят текст вместо его усечения? - PullRequest
45 голосов
/ 12 января 2011

Что нужно сделать, чтобы получить сетку данных WPF с ячейками, которые переносят текст вместо его усечения?

Сейчас, когда текст больше и не помещается в столбец, текст обрезается, и пользователи не могут видеть его значение, потому что свойство IsReadOnly объекта DataGrid имеет значение true. Я хочу, чтобы текст в ячейках был обернут, а высота ячейки (NO CELL WIDTH) увеличила количество, необходимое для отображения всего текста.

Ответы [ 4 ]

92 голосов
/ 13 августа 2012

Спасибо за вашу помощь @HB, это помогло мне (выравнивание необязательно):

<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 голосов
/ 09 мая 2016

Я сделал что-то похожее на решение 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>
13 голосов
/ 12 января 2011

Вы можете попробовать шаблонировать ячейки с TextBlock, для которого включена перенос текста.

0 голосов
/ 09 апреля 2019

Другой простой способ настройки переноса текста для столбцов «Редактирование» и «Текстовая 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>
...