【问题标题】:How do you style a WPF GridView Header?你如何设置 WPF GridView Header 的样式?
【发布时间】:2009-07-28 20:37:14
【问题描述】:

我是从这里开始的:WPF GridViewHeader styling questions

到这里:

现在我只需要去掉“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>

更新

我离解决这个问题更近了(我认为)。

我在 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>

边框的存在只是为了让您可以看到该样式所涵盖的范围。这是其作用的放大图像。如果我能去掉底部的小白边,这似乎是我想要的。

所以我想删除那个微小的白色底部边框也是这个问题的可接受答案。

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

【问题讨论】:

  • 发布您现有的代码/xaml 可能会有所帮助。

标签: wpf gridview styles


【解决方案1】:

这是一种简单的样式,可以满足您的需求。只需将边框上的透明背景更改为您想要的渐变。

    <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>

【讨论】:

    【解决方案2】:

    有时最简单的方法是最好的。更改GridViewColumnHeaderTextBlock 附加属性所需的所有操作

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

    <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
        <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
        <Setter Property="TextBlock.Foreground" Value="Black"/>
    </Style>
    

    【讨论】:

      【解决方案3】:

      查看GridViewColumnHeader.Role 属性。 GridViewColumnHeaderRole 枚举文档中的示例可能会给您一些想法...

      编辑:您是否考虑过使用GridView.HeaderStyle 属性?

      【讨论】:

      • 我看不到只读 Role 属性如何帮助我设置整个标题行的样式。
      • 它不会,但它可能可以让您使用角色“填充”来设置“虚拟”列标题的样式无论如何,我刚刚有了另一个想法,请参阅我的更新答案
      • 我确实考虑过使用 GridView.HeaderStyle - 因为我习惯于做 ASP.NET 工作。这是在 WPF 中,似乎没有(根据 VS intellisense)任何 GridView.HeaderStyle。不过,我会检查一下以确保。
      【解决方案4】:

      我解决了这个问题,但我认为应该有更好的方法。问题是我在每列的标题上都有 TextBlocks。未使用的区域在标题行上没有任何内容。我刚刚在 GridView.ColumnHeaderContainerStyle 中添加了一个具有相同背景的 TextBlock,它恰好跨越了网格的其余未使用宽度。

      <GridView.ColumnHeaderContainerStyle>
          <Style TargetType="GridViewColumnHeader">
              <Setter Property="Template">
                  <Setter.Value>
                      <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                          <TextBlock Text="" Padding="5">
                              <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>
          </Style>
      </GridView.ColumnHeaderContainerStyle>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-26
        • 2014-11-11
        • 2012-09-13
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多