简体   繁体   中英

How to style a particular Column Header

I have 5 columns Table, ScanCount , Logical Reads etc. This is my sorting handler for all columns:

<Window.Resources>
    <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GroupItem}">
                    <Expander x:Name="exp" IsExpanded="True"
                      Background="White"
                      Foreground="Black">
                        <Expander.Header>
                            <TextBlock Text="{Binding Name}" />
                        </Expander.Header>
                        <ItemsPresenter />
                    </Expander>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        <EventSetter Event="Click"
                     Handler="GridViewColumnHeaderClickedHandler"/>
    </Style>        
</Window.Resources>

<Grid>
    <DataGrid x:Name="GridView1"                   
      ItemsSource="{Binding listAggregation}"
      CanUserAddRows="False" Margin="0,65,0,46" AllowDrop="True" Drop="Grid_Drop" AutoGenerateColumns="True" >

        <DataGrid.Columns>
            <DataGridTextColumn Header="Table">
                <DataGridTextColumn.HeaderStyle>
                    <Style TargetType="DataGridColumnHeader"
                   BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
                        <EventSetter Event="PreviewMouseMove" 
                             Handler="DataGridHeader_PreviewMouseMove"/>
                    </Style>
                </DataGridTextColumn.HeaderStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>


        <DataGrid.GroupStyle>
            <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <DataGridRowsPresenter/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </DataGrid.GroupStyle>

    </DataGrid>

    <Label x:Name="MyGroupDescriptionsList" HorizontalAlignment="Left" Margin="19,10,0,0" VerticalAlignment="Top" Width="151" 
           AllowDrop="True" Drop="Label_Drop" Background="#FFE2D8D8" Height="31"  QueryContinueDrag="Label_QueryContinueDrag" PreviewMouseMove="Label_Mousemove" Content="Drag Your Header Here" FontWeight="Bold"/>
</Grid>

How can i merge both ?? I just want the column header 'Table'(which is the first column) to be able use this drag-drop and rest all columns to use the sorting. Columns are created in code behind. Any suggestions are welcomed. Thanks!

You can used BasedOn to inherit default style. But for that to work instead of setting default style explicitly to ColumnHeaderStyle , declare it under DataGrid resources section. After that you can used BasedOn to inherit default style.

<DataGrid AutoGenerateColumn="False">
    <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridColumnHeader}">
            <EventSetter Event="Click"
                         Handler="GridViewColumnHeaderClickedHandler"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Table">
            <DataGridTextColumn.HeaderStyle>
                <Style TargetType="DataGridColumnHeader"
                       BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
                    <EventSetter Event="PreviewMouseMove" 
                                 Handler="DataGridHeader_PreviewMouseMove"/>
                </Style>
            </DataGridTextColumn.HeaderStyle>
        </DataGridTextColumn>
        .........
    </DataGrid.Columns>
</DataGrid>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM