WPF ListView显示GridLine(可选), 通过附加属性修改

效果见上一篇。


Style:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib"
                    xmlns:local="clr-namespace:ImageButtonTest01.Themes"
                    xmlns:controls="clr-namespace:ImageButtonTest01.Control">
    <!--GridLine-->
    <!--<Visibility x:Key="ListView.GridLine.Horizontal.Visibility">Collapsed</Visibility>
        <Visibility x:Key="ListView.GridLine.Vertical.Visibility">Collapsed</Visibility>-->
    <!--<Visibility x:Key="ListView.GridLine.Horizontal.Visibility">Visible</Visibility>
    <Visibility x:Key="ListView.GridLine.Vertical.Visibility">Visible</Visibility>-->

    <!--<sys:Double x:Key="ListView.GridLine.Horizontal.Width">2</sys:Double>
    <sys:Double x:Key="ListView.GridLine.Vertical.Width">1</sys:Double>-->

    <sys:Double x:Key="ListView.Header.Line.Vertical.Width">1</sys:Double>

    <!--第3个值(右边间距)必须和列线width相同-->
    <Thickness x:Key="ListView.Thumb.Margin">0,0,-1,0</Thickness>
    <sys:Double x:Key="ListView.Header.Height">40</sys:Double>
    <SolidColorBrush x:Key="ListView.Header.Background">#80365080</SolidColorBrush>
    <SolidColorBrush x:Key="ListView.Header.Foreground">#80FFFFFF</SolidColorBrush>

    <LinearGradientBrush x:Key="ListView.GridLine.Horizontal.Brush" StartPoint="0,0" EndPoint="0,1">
        <LinearGradientBrush.GradientStops>
            <GradientStop Color="Orange" Offset="0"/>
            <GradientStop Color="Black" Offset="0.5"/>
            <GradientStop Color="Orange" Offset="1"/>
        </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="ListView.GridLine.Horizontal.MouseOver.Brush" StartPoint="0,0" EndPoint="0,1">
        <LinearGradientBrush.GradientStops>
            <GradientStop Color="OrangeRed" Offset="0"/>
            <GradientStop Color="WhiteSmoke" Offset="0.5"/>
            <GradientStop Color="OrangeRed" Offset="1"/>
        </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="ListView.GridLine.Vertical.Brush" StartPoint="0,0" EndPoint="1,0">
        <LinearGradientBrush.GradientStops>
            <GradientStop Color="WhiteSmoke" Offset="0"/>
            <GradientStop Color="Black" Offset="0.5"/>
            <GradientStop Color="WhiteSmoke" Offset="1"/>
        </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>

    <Style x:Key="ListViewHeaderThumb" TargetType="Thumb">
        <Setter Property="Background" Value="Chocolate"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Border Padding="{TemplateBinding Padding}" Background="Transparent" Width="10"
                            Margin="{StaticResource ListView.Thumb.Margin}"
                            HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                        <Rectangle Width="{StaticResource ListView.Header.Line.Vertical.Width}"
                                   Fill="{StaticResource ListView.GridLine.Vertical.Brush}"
                                   HorizontalAlignment="Right" VerticalAlignment="Stretch"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="DefaultListViewHeader" TargetType="GridViewColumnHeader">
        <Setter Property="Foreground" Value="{StaticResource ListView.Header.Foreground}"/>
        <Setter Property="Background" Value="{StaticResource ListView.Header.Background}"/>
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Margin" Value="0"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="MinHeight" Value="20"/>
        <Setter Property="Height" Value="{StaticResource ListView.Header.Height}"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="BorderBrush" Value="Green"/>
        <Setter Property="FontSize" Value="18"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="GridViewColumnHeader">
                    <Border x:Name="HeaderBorder" Padding="0" Margin="0,0,0,0"
                            Background="{TemplateBinding Background}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            BorderBrush="{TemplateBinding BorderBrush}">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <ContentPresenter x:Name="HeaderContent" Content="{TemplateBinding Content}"
                                              ContentTemplate="{TemplateBinding ContentTemplate}"
                                              Margin="0" RecognizesAccessKey="True"
                                              HorizontalAlignment="Center" VerticalAlignment="Center"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>

                            <Thumb x:Name="PART_HeaderGripper" Grid.Column="1" HorizontalAlignment="Right"
                                   Style="{StaticResource ListViewHeaderThumb}"/>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsDragging, ElementName=PART_HeaderGripper}" Value="True">
                            <Setter Property="Foreground" Value="Lavender"/>
                            <Setter Property="FontSize" Value="20"/>
                            <Setter TargetName="HeaderBorder" Property="Background" Value="Violet"/>
                        </DataTrigger>

                        <Trigger Property="IsPressed" Value="true">
                            <Setter TargetName="HeaderContent" Property="Margin" Value="6,1,6,1" />
                            <Setter Property="Foreground" Value="Cyan"/>
                            <Setter Property="FontSize" Value="20"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock TextBlock.FontWeight="SemiBold" Text="{Binding}" TextAlignment="Center"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>

        <Style.Triggers>
            <Trigger Property="Role" Value="Floating">
                <Setter Property="Opacity" Value="0.7"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="GridViewColumnHeader">
                            <Canvas Name="PART_FloatingHeaderCanvas">
                                <Rectangle Fill="#60000000" Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}" />
                            </Canvas>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>


    <Style x:Key="DefaultGridViewScrollViewerStyle" TargetType="{x:Type ScrollViewer}" BasedOn="{StaticResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
        <Setter Property="Focusable" Value="false" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                    <Grid Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <DockPanel Margin="{TemplateBinding Padding}">
                            <ScrollViewer DockPanel.Dock="Top" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
                                <GridViewHeaderRowPresenter AllowsColumnReorder="{Binding TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}"
                                                            ColumnHeaderContainerStyle="{Binding TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}"
                                                            ColumnHeaderToolTip="{Binding TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}"
                                                            ColumnHeaderStringFormat="{Binding TemplatedParent.View.ColumnHeaderStringFormat, RelativeSource={RelativeSource TemplatedParent}}"
                                                            ColumnHeaderContextMenu="{Binding TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}"
                                                            ColumnHeaderTemplate="{Binding TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}"
                                                            Columns="{Binding TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}"
                                                            ColumnHeaderTemplateSelector="{Binding TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}"
                                                            Margin="0" Visibility="Visible" x:Name="PART_Header" Height="auto"
                                                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                            </ScrollViewer>
                            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                                    CanContentScroll="{TemplateBinding CanContentScroll}"
                                                    ContentTemplate="{TemplateBinding ContentTemplate}"
                                                    Content="{TemplateBinding Content}"
                                                    KeyboardNavigation.DirectionalNavigation="Local"
                                                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                        </DockPanel>

                        <ScrollBar x:Name="PART_HorizontalScrollBar" Cursor="Arrow" Maximum="{TemplateBinding ScrollableWidth}"
                                   Minimum="0.0" Orientation="Horizontal" Grid.Row="1"
                                   Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                   Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                   ViewportSize="{TemplateBinding ViewportWidth}" />
                        <ScrollBar x:Name="PART_VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}"
                                   Minimum="0.0" Orientation="Vertical"
                                   Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                   Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                   ViewportSize="{TemplateBinding ViewportHeight}" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding Columns, ElementName=PART_Header}" Value="{x:Null}">
                            <Setter Property="Visibility" TargetName="PART_Header" Value="Collapsed"></Setter>
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <!--ItemContainerStyle-->
    <Style x:Key="DefaultListViewItemContainerStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Margin" Value="0"/>
        <Setter Property="Padding" Value="0"/>
        <!--也可以通过BorderThickness和BorderBrush的Bottom设置水平线条宽度和颜色-->
        <Setter Property="BorderBrush" Value="LightGray"/>
        <Setter Property="BorderThickness" Value="0,0,0,0"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="FontSize" Value="16"/>
        <!--<Setter Property="controls:ListViewHelper.HorizontalLineWidth" Value="3"/>-->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Background="{TemplateBinding Background}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>

                            <!--<controls:GridViewRowPresenterWithGridLines Height="60"
                                                                        Columns="{TemplateBinding GridView.ColumnCollection}"
                                                                        Margin="{TemplateBinding Padding}"
                                                                        GridLineWidth="{StaticResource ListView.GridLine.Vertical.Width}"
                                                                        GridLineBrush="{StaticResource ListView.GridLine.Vertical.Brush}"
                                                                        GridLinesVisibility="{StaticResource ListView.GridLine.Horizontal.Visibility}"/>

                            --><!--水平线条--><!--
                            <Rectangle x:Name="horLine" Grid.Row="1" Height="{StaticResource ListView.GridLine.Horizontal.Width}"
                                       HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
                                       Fill="{StaticResource ListView.GridLine.Horizontal.Brush}"
                                       Visibility="{StaticResource ListView.GridLine.Vertical.Visibility}"/>-->
                            <controls:GridViewRowPresenterWithGridLines Height="60"
                                                                        Columns="{TemplateBinding GridView.ColumnCollection}"
                                                                        Margin="{TemplateBinding Padding}"
                                                                        GridLineWidth="{Binding Path=(controls:ListViewHelper.VerticalLineWidth),RelativeSource={RelativeSource TemplatedParent}}"
                                                                        GridLineBrush="{Binding Path=(controls:ListViewHelper.VerticalLineBrush),RelativeSource={RelativeSource TemplatedParent}}"
                                                                        GridLinesVisibility="{Binding Path=(controls:ListViewHelper.VerticalLineVisibility),RelativeSource={RelativeSource TemplatedParent}}"/>
                            <!--水平线条-->
                            <Rectangle x:Name="horLine" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
                                       Height="{Binding Path=(controls:ListViewHelper.HorizontalLineWidth),RelativeSource={RelativeSource TemplatedParent}}"
                                       Fill="{Binding Path=(controls:ListViewHelper.HorizontalLineBrush),RelativeSource={RelativeSource TemplatedParent}}"
                                       Visibility="{Binding Path=(controls:ListViewHelper.HorizontalLineVisibility),RelativeSource={RelativeSource TemplatedParent}}"/>
                        </Grid>
                    </Border>

                    <ControlTemplate.Triggers>
                        <!--设置隔行背景-->
                        <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                            <Setter TargetName="border" Property="Background" Value="#50e9e9e9"/>
                        </Trigger>
                        <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                            <Setter TargetName="border" Property="Background" Value="#FFe9e9e9"/>
                        </Trigger>

                        <!--鼠标经过-->
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="border" Property="Background" Value="#D0BA7DF4"/>
                            <Setter TargetName="horLine" Property="Fill" Value="{StaticResource ListView.GridLine.Horizontal.MouseOver.Brush}"/>
                            <Setter Property="Foreground" Value="WhiteSmoke"/>
                            <Setter Property="FontSize" Value="20"/>
                        </Trigger>

                        <!--被选中-->
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="border" Property="Background" Value="#A145F8" />
                            <Setter Property="Foreground" Value="WhiteSmoke" />
                        </Trigger>


                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="true" />
                                <Condition Property="Selector.IsSelectionActive" Value="True" />
                            </MultiTrigger.Conditions>

                            <Setter Property="Background" Value="Red" />
                            <Setter Property="Foreground" Value="WhiteSmoke" />
                        </MultiTrigger>

                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsEnabled" Value="False" />
                                <Condition Property="IsSelected" Value="True" />
                            </MultiTrigger.Conditions>
                            <MultiTrigger.Setters>
                                <Setter TargetName="border" Property="Opacity" Value="0.4" />
                            </MultiTrigger.Setters>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <ControlTemplate x:Key="DefaultListViewTemplateStyle" TargetType="{x:Type ListView}">
        <Border x:Name="Border" SnapsToDevicePixels="true"
                Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}">
            <ScrollViewer Padding="{TemplateBinding Padding}" Style="{StaticResource DefaultGridViewScrollViewerStyle}">
                <ItemsPresenter/>
            </ScrollViewer>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsGrouping" Value="true">
                <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                <Setter TargetName="Border" Property="Opacity" Value="0.4" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <!--Item水平布局-->
    <ItemsPanelTemplate x:Key="HorizontalListViewPanel">
        <VirtualizingStackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </ItemsPanelTemplate>

    <!--Item垂直布局-->
    <ItemsPanelTemplate x:Key="VerticalListViewPanel">
        <VirtualizingStackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </ItemsPanelTemplate>

    <!--Item折布局-->
    <ItemsPanelTemplate x:Key="WrapPanelViewPanel">
        <WrapPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </ItemsPanelTemplate>

    <Style x:Key="DefaultListViewStyle" TargetType="{x:Type ListView}">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <!--<Setter Property="VerticalContentAlignment" Value="Center"/>-->
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
        <Setter Property="SelectionMode" Value="Single" />
        <!--隔行变色-->
        <Setter Property="AlternationCount" Value="2"/>
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
        <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
        <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/>
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="SelectionMode" Value="Single"/>
        <Setter Property="ItemContainerStyle" Value="{StaticResource DefaultListViewItemContainerStyle}"/>
        <Setter Property="Template" Value="{StaticResource DefaultListViewTemplateStyle}"/>
        <Setter Property="ItemsPanel" Value="{StaticResource VerticalListViewPanel}"/>
    </Style>
</ResourceDictionary>

附加属性类:

public static class ListViewHelper
{
    static ListViewHelper()
    {

    }

    #region ListView附加属性

    public static readonly DependencyProperty HorizontalLineWidthProperty = DependencyProperty.RegisterAttached("HorizontalLineWidth", typeof(double),
                                                            typeof(ListViewHelper), new PropertyMetadata(1.0));
    public static double GetHorizontalLineWidth(DependencyObject dp)
    {
        return (double)dp.GetValue(HorizontalLineWidthProperty);
    }
    public static void SetHorizontalLineWidth(DependencyObject dp, double value)
    {
        dp.SetValue(HorizontalLineWidthProperty, value);
    }

    public static readonly DependencyProperty VerticalLineWidthProperty = DependencyProperty.RegisterAttached("VerticalLineWidth", typeof(double),
                                                            typeof(ListViewHelper), new PropertyMetadata(1.0));
    public static double GetVerticalLineWidth(DependencyObject dp)
    {
        return (double)dp.GetValue(VerticalLineWidthProperty);
    }
    public static void SetVerticalLineWidth(DependencyObject dp, double value)
    {
        dp.SetValue(VerticalLineWidthProperty, value);
    }

    public static readonly DependencyProperty HorizontalLineBrushProperty = DependencyProperty.RegisterAttached("HorizontalLineBrush", typeof(Brush),
                                                                    typeof(ListViewHelper), new PropertyMetadata(Brushes.Red));
    public static Brush GetHorizontalLineBrush(DependencyObject dp)
    {
        return (Brush)dp.GetValue(HorizontalLineBrushProperty);
    }
    public static void SetHorizontalLineBrush(DependencyObject dp, Brush value)
    {
        dp.SetValue(HorizontalLineBrushProperty, value);
    }

    public static readonly DependencyProperty VerticalLineBrushProperty = DependencyProperty.RegisterAttached("VerticalLineBrush", typeof(Brush),
                                                                    typeof(ListViewHelper), new PropertyMetadata(Brushes.Black));
    public static Brush GetVerticalLineBrush(DependencyObject dp)
    {
        return (Brush)dp.GetValue(VerticalLineBrushProperty);
    }
    public static void SetVerticalLineBrush(DependencyObject dp, Brush value)
    {
        dp.SetValue(VerticalLineBrushProperty, value);
    }

    public static readonly DependencyProperty HorizontalLineVisibilityProperty = DependencyProperty.RegisterAttached("HorizontalLineVisibility", typeof(Visibility),
                                                                    typeof(ListViewHelper), new PropertyMetadata(Visibility.Collapsed));
    public static Visibility GetHorizontalLineVisibility(DependencyObject dp)
    {
        return (Visibility)dp.GetValue(HorizontalLineVisibilityProperty);
    }
    public static void SetHorizontalLineVisibility(DependencyObject dp, Visibility value)
    {
        dp.SetValue(HorizontalLineVisibilityProperty, value);
    }

    public static readonly DependencyProperty VerticalLineVisibilityProperty = DependencyProperty.RegisterAttached("VerticalLineVisibility", typeof(Visibility),
                                                                    typeof(ListViewHelper), new PropertyMetadata(Visibility.Collapsed));
    public static Visibility GetVerticalLineVisibility(DependencyObject dp)
    {
        return (Visibility)dp.GetValue(VerticalLineVisibilityProperty);
    }
    public static void SetVerticalLineVisibility(DependencyObject dp, Visibility value)
    {
        dp.SetValue(VerticalLineVisibilityProperty, value);
    }
    #endregion
}

使用:

<ListView Margin="3" Width="600" Height="320"
    ItemsSource="{Binding Persons}"
    Style="{StaticResource DefaultListViewStyle}">
    <ListView.ItemContainerStyle>
        <Style BasedOn="{StaticResource DefaultListViewItemContainerStyle}" TargetType="{x:Type ListViewItem}">
            <!--设置水平线条宽度-->
            <Setter Property="control:ListViewHelper.HorizontalLineWidth" Value="2"/>
            <!--设置水平线条画刷-->
            <!--<Setter Property="control:ListViewHelper.HorizontalLineBrush" Value="Red"/>-->
            <Setter Property="control:ListViewHelper.HorizontalLineBrush" Value="{StaticResource ListView.GridLine.Horizontal.Brush}"/>
            <!--设置水平线条是否可见-->
            <Setter Property="control:ListViewHelper.HorizontalLineVisibility" Value="Visible"/>


            <!--设置垂直线条宽度-->
            <Setter Property="control:ListViewHelper.VerticalLineWidth" Value="1"/>
            <!--设置垂直线条画刷-->
            <Setter Property="control:ListViewHelper.VerticalLineBrush" Value="Black"/>
            <!--设置垂直线条是否可见-->
            <Setter Property="control:ListViewHelper.VerticalLineVisibility" Value="Visible"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView ColumnHeaderContainerStyle="{StaticResource DefaultListViewHeader}">
            <GridViewColumn Header="Name" Width="160" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Header="Country" Width="130" DisplayMemberBinding="{Binding Country}"/>
            <GridViewColumn Header="Age" Width="120" DisplayMemberBinding="{Binding Age}"/>
            <GridViewColumn Header="Other" Width="120">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="Other"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneOnce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值