【问题标题】:DataGrid column header text wrapping in silverlight在 Silverlight 中换行的 DataGrid 列标题文本
【发布时间】:2011-10-10 19:36:04
【问题描述】:

我在我的 silverlight 项目中使用了 DataGrid,并且我想要一列来包装它的 header 文本。我知道为标题使用样式可能是答案,但我想知道数据网格列标题是否有 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>

谢谢!

【问题讨论】:

    标签: silverlight datagrid


    【解决方案1】:

    我还没有找到让 Silverlight 自动包装标题的方法(与 TextBlockTextWrapping 属性非常相似)。我怀疑由于DataGridColumn.Header property的限制,这是不可能的:

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

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

    <sdk:DataGridTextColumn Header="ABCD&#10;EFGH&#10;IJKL" />
    

    【讨论】:

    • 虽然这感觉不“纯粹”,但当您只想调整特定列时,它实际上是一个非常实用的解决方案,谢谢!
    【解决方案2】:

    DataGridColumn 上没有特定的属性来支持这一点,但是一旦您创建了正确的样式,这同样容易 - 只需为特定列设置 HeaderStyle 属性。

    创建 TargetType 为 DataGridColumnHeader 的 Style 资源,并将 ContentTemplate 属性设置为包含 TextWrapping 属性设置为 Wrap 的 TextBlock 的 DataTemplate。我已将 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>
    

    【讨论】:

      【解决方案3】:

      这是我的代码

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 2023-03-07
        • 2011-09-14
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2012-05-24
        相关资源
        最近更新 更多