2010-12-20 9 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

+0

@ user496949:私は恐れている。並べ替えの矢印は、テンプレート(ヘッダーなど)に属しているため、テンプレートを元に戻すには、全体を再テンプレートする必要があります。とにかくこれを回避する方法は見たことがありません。 –

+0

はい、これが唯一の方法です。 – dex3703

関連する問題