wpf DataGrid 更改单元格换行

标签 wpf wpfdatagrid app.xaml

我有一个带有自动生成列的 WPF DataGrid。我已经能够使用代码覆盖列标题,并且当我缩小列时也可以强制换行。当我尝试在单元格上强制文本换行时,我的绑定(bind)会中断...它在每一列中显示相同的值。

这是我用来格式化的 XAML

<DataGrid.CellStyle>
   <Style TargetType="DataGridCell">
       <Setter Property="ContentTemplate">
           <Setter.Value>
               <DataTemplate>
                   <TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock>
               </DataTemplate>
           </Setter.Value>
       </Setter>
   </Style>
</DataGrid.CellStyle>
<DataGrid.ColumnHeaderStyle>
   <Style TargetType="DataGridColumnHeader">
       <Setter Property="ContentTemplate">
           <Setter.Value>
               <DataTemplate>
                   <TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock>
               </DataTemplate>
           </Setter.Value>
       </Setter>
   </Style>
</DataGrid.ColumnHeaderStyle>

同样,ColumnHeaderStyle 工作正常,但 CellStyle 不起作用。

建议?

更新:

列标题设置如下:

if (e.Column.Header.ToString() == "Product_Description")
    e.Column.Header = "Product";

if (e.Column.Header.ToString() == "Original_Gross_Weight")
    e.Column.Header = "Orig. Net Wt.";

标题的换行效果很好。仅对内容进行换行是行不通的。

最佳答案

在绑定(bind)上,似乎一旦替换了 DataGridCell 数据样式, 的完整对象就会被放置到内容呈现器中,而不是列的当前属性中。


看来您覆盖了AutoGenerateColumn,那么为什么不简单地关闭自动生成并手动定义列呢?

这是一个工作版本,其中文本被包装为数据:

<Window.Resources>
    <model:People x:Key="People">
        <model:Person First="Joe"   Last="Smith"   Phone="303-555 5555" />
        <model:Person First="Mary"  Last="Johnson" Phone="720-555 5555" />
        <model:Person First="Frank" Last="Wright"  Phone="202-555 5555" />
    </model:People>
</Window.Resources>
<DataGrid AutoGenerateColumns="False"
          ItemsSource="{StaticResource People}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="First" Binding="{Binding First}" />
        <DataGridTextColumn Header="The Name" Binding="{Binding Last}" />
        <DataGridTextColumn Header="Phone Number" Binding="{Binding Phone}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Setter Property="TextWrapping"
                            Value="Wrap" />
                </Style>
            </DataGridTextColumn.ElementStyle>

        </DataGridTextColumn>
    </DataGrid.Columns>

</DataGrid>

结果

enter image description here

关于wpf DataGrid 更改单元格换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210002/

相关文章:

c# - 以编程方式取消选择 DataGrid 中的行

wpf - 资源字典中的 DataTemplate 不继承自 app.xaml 样式?

wpf - 引用的外部命名空间与本地命名空间崩溃

wpf - 在不连接传感器的情况下在 Kinect Studio 中播放

c# - 未应用自定义控件的样式

WPF DataGrid,划掉该行

c# - 如何部署 "SQL Server Express + EF"应用程序

wpf - 如何将右键单击上下文菜单添加到 WPF 4 DataGrid 的列标题?

wpf - 覆盖应用程序广泛的样式