【问题标题】:wpf DataGrid change wrapping on cellswpf DataGrid 更改单元格上的换行
【发布时间】:2015-11-19 12:16:58
【问题描述】:

我有一个带有自动生成列的 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.";

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

【问题讨论】:

  • 如果网格是从属性自动生成的,属性名称没有空格可以换行...那么将其设置为wrap 提供了什么?
  • 查看更新。当我在代码中覆盖标头时,标头包装起作用。
  • 哈。刚刚在标题文本中也看到了一个错字。哎呀

标签: wpf wpfdatagrid app.xaml


【解决方案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>

结果

【讨论】:

  • 是的。不妨。一旦我在代码中手动键入标题的所有内容,我不妨在 XAML 中进行。这将允许我在一个地方自定义所有内容。感谢您提供详尽的示例。
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 2013-07-20
  • 2018-04-29
  • 2016-03-29
  • 2020-04-18
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多