0

我在带有 WPF 的 VB.Net 中工作,我需要在运行时(在代码隐藏中)创建一个 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)
4

1 回答 1

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)
于 2012-05-31T20:27:17.253 回答