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

gsi*_*ank 48 wpf datagrid word-wrap

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

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

D.R*_*ado 96

感谢你的帮助@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>
Run Code Online (Sandbox Code Playgroud)

  • 对于其他人:如果此解决方案不适合您,请尝试调整列宽.它会在开始包装文本之前尝试扩展列宽. (3认同)
  • 您可以执行“ Width =“ *”`,将其设置为填满整个空间,但不要超过容器允许的大小。 (3认同)
  • 在 DataGridTextColumn 上设置 Width 属性,如:&lt;DataGridTextColumn Header="Wrapped &amp; central" Binding="{Binding field}" Width="200"&gt; (2认同)

小智 23

我做了类似于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>
Run Code Online (Sandbox Code Playgroud)


H.B*_*.B. 13

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

  • 非常感谢.已经解决了样式的问题.我的意思是,将DataGridTextColumn的ElementStyle属性设置为具有类似"<Setter Property ="TextBlock.TextWrapping"Value ="Wrap"/>"的setter的东西.在我看来,更好的是将控件的样式更改为自定义控件的方式,而不是重写其模板.无论如何,我愿意接受建议,因为我是WPF的新手.我的问题是我只是不能应用一个样式ala TargetType cos似乎在某种程度上TextBlock指定了一个样式来覆盖应用的ala TargetType样式.再次感谢. (11认同)
  • 使用一种风格是一个相当不错的主意,不要认为有更好的解决方案(至少在这种特定情况下) (2认同)