DataGrid列标题文本包装在silverlight中

时间:2011-07-22 06:34:08

标签: silverlight datagrid

我在我的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>

                            

谢谢!

3 个答案:

答案 0 :(得分:8)

我还没有找到让Silverlight自动包装标头的方法(与TextWrapping的{​​{1}}属性的方式非常相似)。我怀疑由于DataGridColumn.Header property

的限制,这是不可能的
  

使用对象作为标题内容时谨慎使用;并非所有Silverlight对象都适合在标题显示的有限显示表面内使用。

但是,您可以“手动”换行标题文本。如果在标题文本中添加换行符,则标题文本将在该点处分为两行。 (在XAML中,您使用字符实体TextBlock。)例如,以下标题文本显示为分为三行:

&#10;

答案 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>