基本上我想要实现的是只有我的DataGrid的第二列才能启用文本换行,而不是在没有空间的情况下剪切它。
我的问题是xaml代码中的DataGrid是空的,我是通过编程方式从类生成的。
DataGrid的Xaml是这样的:
<DockPanel Grid.Row="1">
<DataGrid Name="dg_Misc" Margin="2" Background="#FF212121" SelectionUnit="Cell" VerticalGridLinesBrush="Black" GridLinesVisibility="Vertical"/>
</DockPanel>
虽然我用它生成DataGrid的c#是这样的:
Oggetto oggetto = new Oggetto();
Oggetti.Add( new Oggetto() { } );
dg_Misc.ItemsSource = Oggetti;
dg_Misc.Items.Refresh();
在Oggetto类中,我有两个字符串,Name和Description,当生成DataGrid时,它们成为列的两个标题,我希望列Description的单元格能够启用文本换行。
答案 0 :(得分:2)
利用AutoGeneratingColumn
事件。
在XAML中,使用事件处理程序挂钩事件:
<DataGrid Name="dg_Misc" Margin="2"
Background="#FF212121"
SelectionUnit="Cell"
VerticalGridLinesBrush="Black"
GridLinesVisibility="Vertical"
AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"/>
在代码后面实现你的事件处理程序:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.Header.ToString() == "Description")
{
var col = e.Column as DataGridTextColumn;
var style = new Style(typeof(TextBlock));
style.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap));
style.Setters.Add(new Setter(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center));
col.ElementStyle = style;
}
}
我还添加了一个VerticalAlignment
中心,所以它看起来更好。随意评论/删除该行。
答案 1 :(得分:1)
您应该自己定义DataGrid
的列。
<DataGrid Name="dg_Misc" Margin="2" Background="#FF212121" SelectionUnit="Cell" VerticalGridLinesBrush="Black" GridLinesVisibility="Vertical"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn Header="Description">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:Oggetto}">
<TextBlock Text="{Binding Description}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我添加了AutoGenerateColumns="False"
,因此我们最终不会有四列,只有我在上面定义的列。
然后我定义了两列。
首先是一个简单的DataGridTextColumn
,Binding
设置为Name
属性。
第二个是DataGridTemplateColumn
,我可以自己定义列的模板。我已将TextBlock
设置为Binding
设置为Desciription
和TextWrapping="Wrap"
,以实现您想要的功能。