我在我的silverlight项目中使用了DataGrid,我想要一个列来包装它的header文本。我知道使用标题的样式可能是答案,但我想知道datagrid列标题是否有一个wrap属性?
这是我的代码:
<data:DataGrid x:Name="gridViewResources"
AutoGenerateColumns="False"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding OpportunityResourceDetailList, Mode=TwoWay}" IsReadOnly="True">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="#" Width="Auto">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding PositionLevel.FullPositionAndLevelName}" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
谢谢!
答案 0 :(得分:8)
我还没有找到让Silverlight自动包装标头的方法(与TextWrapping
的{{1}}属性的方式非常相似)。我怀疑由于DataGridColumn.Header property:
使用对象作为标题内容时谨慎使用;并非所有Silverlight对象都适合在标题显示的有限显示表面内使用。
但是,您可以“手动”换行标题文本。如果在标题文本中添加换行符,则标题文本将在该点处分为两行。 (在XAML中,您使用字符实体TextBlock
。)例如,以下标题文本显示为分为三行:
答案 1 :(得分:0)
DataGridColumn上没有特定属性来支持此功能,但是一旦创建了正确的样式,就可以轻松完成 - 只需为特定列设置HeaderStyle属性。
创建TargetType为DataGridColumnHeader的Style资源,并将ContentTemplate属性设置为包含TextBlock的DataTemplate,并将TextWrapping属性设置为Wrap。我已将TextBlock包含在Grid面板中,以使其更接近ContentPresenter使用的默认DataTemplate。使用HeaderStyle属性将此样式应用于特定列,或使用ColumnHeaderStyle属性将其应用于整个DataGrid。
请注意,除非您专门限制DataTemplate中TextBlock的宽度,否则您需要将Column的宽度约束为小于包装生效的标题文本。
<Style x:Key="CustomDataGridColumnHeaderStyle" TargetType="sdk:DataGridColumnHeader" BasedOn="{StaticResource DefaultDataGridColumnHeaderStyle}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding}" TextWrapping="Wrap" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
...
<sdk:DataGrid >
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Header Name" Binding="{Binding Xxx}" Width="80" HeaderStyle="{StaticResource CustomDataGridColumnHeaderStyle}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
答案 2 :(得分:0)
这是我的代码
<DataGrid.ColumnHeaderStyle>
<Style TargetType="ContentControl">
<Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
<Setter Property="ContentTemplate" >
<Setter.Value >
<DataTemplate>
<TextBlock Text="{Binding}" TextWrapping="Wrap" FontWeight="Bold" TextAlignment="Center" LineHeight="20"></TextBlock></DataTemplate>
</Setter.Value>
</Setter>
</Style>
`enter code here`</DataGrid.ColumnHeaderStyle>