2

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

这是我用来格式化的 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.";

标题的包装效果很好。只是内容的包装不起作用。

4

1 回答 1

2

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


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

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

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

结果

在此处输入图像描述

于 2015-08-25T21:20:38.573 回答