WPF-Listview列标题使用自定义样式调整大小

时间:2018-01-01 04:46:50

标签: wpf xaml listview columnheader

我是WPF的新手,在WPF应用程序中我使用Listview Gridview来显示数据。 我已经自定义了Listview的样式,现在我想为Listview Gridview列标题更改鼠标悬停效果的默认亮蓝色

我用Google搜索并更改了Column标题的样式但我无法调整listview列的大小(无法使用鼠标拖动调整列标题的大小)。

是否有相同的解决方案?

提前致谢

1 个答案:

答案 0 :(得分:4)

如果您更改列标题的模板(正如我假设您在更改样式时所做的那样),您实际上是在重建它。因此,您必须重建原始模板的所有功能。

您可以获得完整的模板here

但是就你的问题而言,请务必添加以下样式:

<Style x:Key="GridViewColumnHeaderGripper"
   TargetType="Thumb">
    <Setter Property="Width"
      Value="18" />
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0"
                       EndPoint="0,1">
                <LinearGradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="{DynamicResource BorderLightColor}"
                      Offset="0.0" />
                        <GradientStop Color="{DynamicResource BorderDarkColor}"
                      Offset="1.0" />
                    </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border Padding="{TemplateBinding Padding}"
            Background="Transparent">
                    <Rectangle HorizontalAlignment="Center"
                 Width="1"
                 Fill="{TemplateBinding Background}" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderBrush">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1"
                       StartPoint="0.5,0">
                <GradientStop Color="Black"
                  Offset="0" />
                <GradientStop Color="White"
                  Offset="1" />
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

然后,在您的自定义样式中,确保ControlTemplate中包含一个Grid,第一项是您想要的自定义设计,第二项是标题抓取器。

以下是一个例子:

<Style x:Key="CustomGridViewColumnHeader" TargetType="{x:Type GridViewColumnHeader}" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                <Grid>
                    <!-- My Custom Template -->
                    <Border Background="#FF3B4A51" Height="35">
                        <TextBlock Text="{TemplateBinding Content}" Foreground="White" FontSize="15" Margin="4,0,0,0" Padding="0,5" />
                    </Border>

                    <!-- The gripper / header resizer -->
                    <Thumb x:Name="PART_HeaderGripper"
             HorizontalAlignment="Right"
             Margin="0,0,-9,0"
             Style="{StaticResource GridViewColumnHeaderGripper}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

    <!-- Other properties you want to change ... -->
    <Setter Property="IsHitTestVisible" Value="True"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"></Setter>
</Style>