如何获得一个WPF数据网格与细胞, Package 文本,而不是截断它?

cwdobuhd  于 2023-10-22  发布在  其他
关注(0)|答案(6)|浏览(146)

要获得一个包含换行而不是截断文本的单元格的WPF DataGrid,必须执行哪些操作?
现在,当一个文本太大,不适合一个列时,文本会被截断,用户看不到它的值,因为DataGrid的IsReadOnly属性为true。我想要的是,单元格中的文本被换行,单元格高度(无单元格宽度)增加了显示所有文本所需的量。

eh57zj3b

eh57zj3b1#

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

jdgnovmf2#

我做了一个类似D.Rosados溶液的东西。不过,如果你有更多的列需要 Package ,我的是可重用的。

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

zpf6vheq3#

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

uoifb46i

uoifb46i4#

除了其他的解决办法外,这里还有另一个解决办法

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

rqenqsqc5#

另一种为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>
7gs2gvoe

7gs2gvoe6#

对于WinUi 3,有一个小变化

<controls:DataGridTextColumn
    Width="*"
    Binding="{Binding Value}"
    Header="Value">
    <controls:DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
            <Setter Property="TextBlock.TextAlignment" Value="Left" />
        </Style>
    </controls:DataGridTextColumn.ElementStyle>
</controls:DataGridTextColumn>

需要Style TargetType,并且不再有x:Type,而是直接写入类型。

相关问题