如何在代码隐藏中的DataGrid中设置文本换行?

时间:2012-05-30 18:13:37

标签: wpf vb.net datagrid wpfdatagrid controltemplate

我正在VB.Net w / WPF中工作,我需要在运行时创建一个DataGrid(在代码隐藏中),每个网格单元格中的文本都能够包装。我发现了很多示例,说明如何在XML中执行此操作,但我找不到任何解释如何在代码隐藏中完成此操作的示例。我一直试图弄清楚DataGridTemplateColumn,CellTemplate和DataTemplate如何协同工作。对此的任何帮助将不胜感激。

我认为这相当于我正在尝试做的事情:

<DataGridTemplateColumn>
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <TextBlock TextWrapping="Wrap" />
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

更新

我已经取得了一些进展,但是单元格文本包装仍然无法正常工作......这是我到目前为止所做的:

Dim grid As New DataGrid
grid.AutoGenerateColumns = False

Dim dgtc As New DataGridTemplateColumn
dgtc.Header = "Test"
dgtc.Width = 200

Dim factory1 As New FrameworkElementFactory(GetType(TextBlock))

Dim b1 As New Binding("WrapDirection.Right")

factory1.SetValue(TextBlock.TextWrappingProperty, b1)

Dim dt As New DataTemplate

dt.VisualTree = factory1

dgtc.CellTemplate = dt

grid.Columns.Add(dgtc)

我认为问题在于绑定和textblock属性。这样的事情会更有意义,但它不起作用......

Dim b1 As New Binding("Wrap")

factory1.SetValue(TextBlock.TextWrapping, b1)

1 个答案:

答案 0 :(得分:2)

所以我终于能够找到我想要的东西:http://social.msdn.microsoft.com/Forums/br/wpf/thread/bf75f61a-6247-4964-95be-7ea6f0fa0998

使用它作为参考我终于能够得到一些代码:

Dim grid As New DataGrid
grid.AutoGenerateColumns = False

Dim dgtextcol As New DataGridTextColumn
dgtextcol.Width = 200

dgtextcol.Header = "Test"

Dim b1 = New Binding("Message")
b1.Mode = BindingMode.OneWay

dgtextcol.Binding = b1

Dim textStyle = New Style(GetType(TextBlock))
textStyle.Setters.Add(New Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap))

dgtextcol.ElementStyle = textStyle

grid.Columns.Add(dgtextcol)