我正在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)
答案 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)