代码改变世界

Silverlight的DataGrid实现列标题和单元格换行

2011-10-31 14:40  slmk  阅读(2419)  评论(2编辑  收藏  举报

silverlight的DataGrid控件默认就是单行文本到头,如果设置了列的长度,文本会被截断不显示。如何实现长文本自动换行?我们首先想到的是利用Style,因为换行只是外观的改变,不是行为的改变。

1、标题换行

<Style TargetType="prim:DataGridColumnHeader" x:Key="aHeaderStyle">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}" TextWrapping="Wrap" FontFamily="Verdana" FontSize="12" TextAlignment="Center" HorizontalAlignment="Center"/>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>

其中prim名称空间是:xmlns:prim="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"

应用Style:

<sdk:DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn"
ColumnHeaderStyle
="{StaticResource aHeaderStyle}"
Height
="162" HorizontalAlignment="Left" Margin="18,82,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="150">

2、单元格换行

 <Style x:Key="aCellStyle" TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>

应用Style:

<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="this is a long text need wrap" Width="1.0*" ElementStyle="{StaticResource aCellStyle}" Binding="{Binding Name}"/>
</sdk:DataGrid.Columns>


效果如图:

需要注意的是DataGrid或者是DataGridColumn的Width不能都是Auto,也就是必须制定一个宽度,不管是具体数值还是比例。否则,只会出现一个水平滚动条,而没有换行。


Silverlight打印全套解决方案--支持打印预览、页面设置(横向纵向,页边距,纸张大小、字体大小)、自动分页和多页连续打印