DataGrid标头中的背景

时间:2014-10-03 09:50:36

标签: wpf datagrid styles

我为DataGrid制作了一个样式,我在下面的图片中显示了一些问题。

enter image description here

如果DataGrid的标题没有填充宽度,则会出现一些渐变背景和一个底部和右边框。有没有办法摆脱这两件事情,让它看起来像下图? (用PhotoShop制作的图片用于说明目的)

enter image description here

以下是DataGrid的样式:

<Style TargetType="{x:Type DataGrid}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                         Color="#F50099FF" />
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
                         Color="#FFCCFFFF" />
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
                         Color="#F50099FF" />
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}"
                         Color="#FFCCFFFF" />
    </Style.Resources>
    <Setter Property="IsSynchronizedWithCurrentItem"
            Value="False" />
    <Setter Property="IsReadOnly"
            Value="True" />
    <Setter Property="BorderThickness"
            Value="0" />
    <Setter Property="GridLinesVisibility"
            Value="None" />
    <Setter Property="RowHeaderWidth"
            Value="0" />
    <Setter Property="Background"
            Value="White" />
    <Setter Property="RowBackground"
            Value="Transparent" />
    <Setter Property="AlternatingRowBackground"
            Value="#F5E5E5E5" />
    <Setter Property="SelectionMode"
            Value="Single" />
    <Setter Property="SelectionUnit"
            Value="FullRow" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGrid}">
                <Border BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        Padding="{TemplateBinding Padding}"
                        SnapsToDevicePixels="True">
                    <ScrollViewer x:Name="DG_ScrollViewer"
                                  Focusable="False">
                        <ScrollViewer.Template>
                            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition />
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
                                    <Button Command="ApplicationCommands.SelectAll"
                                            Focusable="False"
                                            Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"
                                            Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}}">
                                        <Button.Visibility>
                                            <Binding Path="HeadersVisibility"
                                                     RelativeSource="{RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}">
                                                <Binding.ConverterParameter>
                                                    <DataGridHeadersVisibility>All</DataGridHeadersVisibility>
                                                </Binding.ConverterParameter>
                                            </Binding>
                                        </Button.Visibility>
                                    </Button>
                                    <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"
                                                                    Grid.Column="1">
                                        <DataGridColumnHeadersPresenter.Visibility>
                                            <Binding Path="HeadersVisibility"
                                                     RelativeSource="{RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}">
                                                <Binding.ConverterParameter>
                                                    <DataGridHeadersVisibility>Column</DataGridHeadersVisibility>
                                                </Binding.ConverterParameter>
                                            </Binding>
                                        </DataGridColumnHeadersPresenter.Visibility>
                                    </DataGridColumnHeadersPresenter>
                                    <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                                            CanContentScroll="{TemplateBinding CanContentScroll}"
                                                            CanHorizontallyScroll="False"
                                                            Grid.ColumnSpan="2"
                                                            CanVerticallyScroll="False"
                                                            ContentTemplate="{TemplateBinding ContentTemplate}"
                                                            Content="{TemplateBinding Content}"
                                                            ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                                            Grid.Row="1" />
                                    <ScrollBar x:Name="PART_VerticalScrollBar"
                                               Grid.Column="2"
                                               Maximum="{TemplateBinding ScrollableHeight}"
                                               Orientation="Vertical"
                                               Grid.RowSpan="2"
                                               Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                               Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                               ViewportSize="{TemplateBinding ViewportHeight}" />
                                    <ScrollBar x:Name="PART_HorizontalScrollBar"
                                               Grid.Row="2"
                                               Grid.ColumnSpan="2"
                                               Maximum="{TemplateBinding ScrollableWidth}"
                                               Orientation="Horizontal"
                                               Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                               Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                               ViewportSize="{TemplateBinding ViewportWidth}" />
                                </Grid>
                            </ControlTemplate>
                        </ScrollViewer.Template>
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

下一个样式是ColumnHeader

<Style x:Key="ColumnHeaderStyleRight"
       TargetType="DataGridColumnHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <Grid>
                    <Border BorderBrush="#DBDBDB"
                            Background="White"
                            BorderThickness="0.5 1 1 1"
                            Padding="3"
                            CornerRadius="0 5 5 0">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="14" />
                            </Grid.ColumnDefinitions>
                            <ContentPresenter 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="3 0"
                                  Stretch="Fill"
                                  Fill="Black"
                                  RenderTransformOrigin="0.5 0.4"
                                  Visibility="Collapsed"
                                  Data="M0,0 L1,0 0.5,1 z" />
                        </Grid>
                    </Border>
                    <!--<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中,我有一个这样的列:

<DataGrid AutoGenerateColumns="False"
          ItemsSource="{Binding FilteredOrders.View}"
          SelectedItem="{Binding SelectedOrder}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Groep"
                            Binding="{Binding Workcenter.Section.Section}"
                            HeaderStyle="{StaticResource ColumnHeaderStyleRight}" />
    </DataGrid.Columns>
</DataGrid>

0 个答案:

没有答案