2010-12-20 23 views

回答

35

我想你將不得不重新模板DataGridColumnHeader並從那裏添加它。這是一個例子。你必須添加一個參考PresentationFramework.Aero

xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" 

<DataGrid ...> 
    <DataGrid.Resources> 
     <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}"> 
      <Setter Property="Width" Value="8"/> 
      <Setter Property="Background" Value="Transparent"/> 
      <Setter Property="Cursor" Value="SizeWE"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Thumb}"> 
         <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="Background" Value="Blue"/> 
      <Setter Property="BorderBrush" Value="Red"/> 
      <Setter Property="BorderThickness" Value="1,1,1,1"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
         <Grid> 
          <Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="*"/> 
            </Grid.ColumnDefinitions> 
            <ContentPresenter Grid.Column="0" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
            <Path x:Name="SortArrow" 
              Grid.Column="1" 
              HorizontalAlignment="Right" VerticalAlignment="Center"           
              Width="8" Height="6" Margin="2,0,5,0" 
              Stretch="Fill" Opacity="0.5" Fill="White" 
              RenderTransformOrigin="0.5,0.4" 
              Visibility="Collapsed" 
              Data="M0,0 L1,0 0.5,1 z" /> 
           </Grid> 
          </Themes:DataGridHeaderBorder> 
          <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/> 
          <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="SortDirection" Value="Ascending"> 
           <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /> 
           <Setter TargetName="SortArrow" Property="RenderTransform"> 
            <Setter.Value> 
             <RotateTransform Angle="180" /> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
          <Trigger Property="SortDirection" Value="Descending"> 
           <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 
+4

爲什麼它是如此複雜?有沒有簡單的方法? – user496949 2010-12-20 23:10:10

+0

@ user496949:恐怕是這樣。排序箭頭屬於模板(與標題等一起),所以爲了讓他們回來,我們必須重新模板化整個事情。無論如何,我從來沒有見過這種方法。 – 2010-12-20 23:31:22

+0

是的,這是做到這一點的唯一方法。 – dex3703 2012-03-29 23:49:34

相關問題