2011-07-22 47 views
0

我在我的silverlight項目中使用DataGrid,我想用一列來包裝它的header文本。我知道使用標題樣式可能是答案,但我想知道是否有一個DataGrid列標題的包裝屬性?DataGrid列標題文字環繞在silverlight中

這裏是我的代碼:

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

謝謝!

回答

8

我還沒有找到一種讓Silverlight自動換行標題的方法(與的TextWrapping屬性幾乎一樣)。我懷疑這是不可能的,由於DataGridColumn.Header property的限制:

使用對象作爲標題內容時使用謹慎;並非所有的Silverlight對象都適合用於爲標題顯示的有限表示表面。

但是,您可以'手動'封裝標題文本。如果您在標題文本中添加換行符,那麼標題文本將在該點處被分成兩行。 (在XAML中,您使用的字符實體&#10;)例如,下面的標題文本顯示拆分爲三條線:

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

雖然這種感覺並不「純淨」它實際上是當你只是想調整一個很大的務實的解決方案具體專欄,謝謝! –

0

有一個DataGridColumn沒有特定的屬性,以支持這一點,但一旦你創建了正確的它的風格同樣簡單 - 只需設置特定列的HeaderStyle屬性即可。

創建的DataGridColumnHeader一個TargetType的樣式資源,並設置ContentTemplate屬性是包含與設定包裹TextWrapping屬性的TextBlock一個DataTemplate。我已將TextBlock放在Grid面板中,以使其更接近ContentPresenter使用的默認DataTemplate。使用HeaderStyle屬性將此樣式應用於特定列或使用ColumnHeaderStyle屬性應用於整個DataGrid。

請注意,除非特別限制DataTemplate中TextBlock的寬度,否則您需要將列的寬度限制爲小於標題文本以使包裝生效。

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