如何获得一个WPF数据网格,其中的单元格包装文本而不是截断文本?

如何获得一个WPF数据网格,其中的单元格包装文本而不是截断文本?,wpf,datagrid,word-wrap,Wpf,Datagrid,Word Wrap,要获得一个WPF数据网格,必须做什么才能使其单元格包装文本而不是截断文本 现在,当文本较大且不适合列时,文本将被截断,用户无法看到它的值,因为DataGrid的IsReadOnly属性为true。我想要的是单元格中的文本被包装,单元格高度(无单元格宽度)增加了显示所有文本所需的数量。您可以尝试使用启用文本包装的TextBlock模板单元格。感谢您的帮助@H.B.,这为我提供了窍门(对齐是可选的): 我制作了类似于D.Rosados解决方案的东西。但是,如果您有更多需要包装的列,则可以重用我的列

要获得一个WPF数据网格,必须做什么才能使其单元格包装文本而不是截断文本


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

您可以尝试使用启用文本包装的
TextBlock
模板单元格。

感谢您的帮助@H.B.,这为我提供了窍门(对齐是可选的):


我制作了类似于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>

为编辑和文本数据网格列设置文本换行的另一种简单方法是指定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>

“您可以尝试使用启用了文本换行功能的TextBlock对单元格进行模板制作。”如果使用TextBlock,您将在复制/粘贴方面遇到问题。

这里有另一种解决方案,可供其他解决方案补充

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


非常感谢。已经解决了样式的问题。我的意思是,将DataGridTextColumn的ElementStyle属性设置为具有类似“”的setter的内容。在我看来,最好是更改控件的样式,作为自定义控件的一种方式,而不是重写其模板。不管怎样,我愿意接受建议,因为我是WPF的新手。我的问题是,我无法应用ala TargetType样式,因为在某种程度上,TextBlock指定了一个样式来覆盖应用的ala TargetType样式。再次感谢。使用样式是一个很好的主意,不要认为有更好的解决方案(至少在这种情况下是这样)。问题是当使用模板列时,您失去了复制文本等基本功能。我目前面临此问题,将使用样式。对于其他人:如果此解决方案不适用于您,请尝试调整列宽。它将尝试在开始包装文本之前扩展列宽。以何种方式调整宽度?我在这里尝试代码,但它在Visual Studio的WPF设计器中似乎没有什么不同。在DataGridTextColumn上设置Width属性,如:您可以执行
Width=“*”
,这将设置它以填充整个空间,但不会超过容器允许的大小。感谢@Anthony Nichols,因为没有设置Width=“*”它不起作用。此外,设置TextBlock.TextAlignment是不必要的。当做
<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>