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