你如何设置WPF GridView标头的样式?

djs*_*rtz 20 wpf gridview styles

我从这里开始:WPF GridViewHeader样式问题

对此:

WPF GridView标题

现在我只需要摆脱"Size"标题右侧的空白区域.我基本上有一个GridViewColumnHeader模板,使其成为一个TextBlock.有什么方法可以设置该标题区域的背景,以便它跨越GridView的整个宽度?

新增代码:

这是我最右边的专栏.网格不会跨越100%的可用窗口区域.在标题中,我需要此列右侧的所有内容与列标题本身具有相同的背景.

<Style x:Key="GridHeaderRight" TargetType="{x:Type GridViewColumnHeader}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                            <TextBlock Text="{TemplateBinding Content}" Padding="5" Width="{TemplateBinding Width}" TextAlignment="Right">
                                <TextBlock.Background>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                        <GradientStop Offset="0.0" Color="#373638" />
                                        <GradientStop Offset="1.0" Color="#77797B" />
                                    </LinearGradientBrush>
                                </TextBlock.Background>
                            </TextBlock>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="OverridesDefaultStyle" Value="True" />
                <Setter Property="Background" Value="Green" />
                <Setter Property="Foreground" Value="White" />
                <Setter Property="FontSize" Value="12" />
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <GradientStop Offset="0.0" Color="#373638" />
                            <GradientStop Offset="1.0" Color="#77797B" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Style>

<GridViewColumn Width="200" HeaderContainerStyle="{ StaticResource GridHeaderRight}" Header="Size">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=EmployeeNumber}" HorizontalAlignment="Right"></TextBlock>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
Run Code Online (Sandbox Code Playgroud)

UPDATE

我更接近(我认为)解决这个问题.

我在GridView标记中添加了以下代码:

<GridView.ColumnHeaderContainerStyle>
    <Style TargetType="GridViewColumnHeader">
        <Setter Property="BorderThickness" Value="1"></Setter>
        <Setter Property="BorderBrush" Value="Green"></Setter>
        <Setter Property="Height" Value="Auto"></Setter>
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Offset="0.0" Color="#373638" />
                    <GradientStop Offset="1.0" Color="#77797B" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
    </Style>
</GridView.ColumnHeaderContainerStyle>
Run Code Online (Sandbox Code Playgroud)

边界就在那里,你可以看到这种风格所涵盖的边界.这是它的作用的放大图像.如果我能摆脱底部的白色小边框,这似乎就是我想要的.

因此,我想删除那个微小的白色底部边框也是这个问题的可接受答案.

ColumnHeaderContainerStyle http://img170.imageshack.us/img170/3851/columnheadercontainerst.png

Bre*_*ler 11

这是一种简单的风格,可以满足您的需求.只需将边框上的透明背景更改为所需的渐变.

    <Style TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                    <Border BorderThickness="0,0,0,1" BorderBrush="Black" Background="Transparent">
                        <TextBlock x:Name="ContentHeader" Text="{TemplateBinding Content}" Padding="5,5,5,0" Width="{TemplateBinding Width}" TextAlignment="Center" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="FontFamily" Value="Segoe UI" />
        <Setter Property="FontSize" Value="12" />
    </Style>
Run Code Online (Sandbox Code Playgroud)


Biz*_*han 5

有时最简单的方法就是最好的。您只需更改TextBlock附加属性即可GridViewColumnHeader

在资源中定义类似的东西:

<Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
    <Setter Property="TextBlock.Foreground" Value="Black"/>
</Style>
Run Code Online (Sandbox Code Playgroud)


Tho*_*que 1

看看该GridViewColumnHeader.Role物业。GridViewColumnHeaderRole枚举文档中的示例可能会给您一些想法......

编辑:您是否考虑过使用该GridView.HeaderStyle房产?