wpf DataGrid更改单元格

时间:2015-08-25 17:05:28

标签: wpf wpfdatagrid app.xaml

我有一个带有AutoGenerate列的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.";

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

1 个答案:

答案 0 :(得分:1)

在绑定上,似乎一旦替换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>

<强>结果

enter image description here