Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF ListView中的网格线_.net_Wpf - Fatal编程技术网

.net WPF ListView中的网格线

.net WPF ListView中的网格线,.net,wpf,.net,Wpf,如何在WPFListView控件中显示网格线?试试这些资源-它们都提供了类似的简单解决方案,我在过去成功地使用过 更新:链接现在指向网页的存档副本,因为网页已经关闭了一段时间实现自定义GridViewRowPresenter并在ArrangeOverride方法中绘制垂直线 protected override Size ArrangeOverride(Size arrangeSize) { var size = base.ArrangeOverride(ar

如何在WPFListView控件中显示网格线?

试试这些资源-它们都提供了类似的简单解决方案,我在过去成功地使用过


更新:链接现在指向网页的存档副本,因为网页已经关闭了一段时间

实现自定义GridViewRowPresenter并在ArrangeOverride方法中绘制垂直线

    protected override Size ArrangeOverride(Size arrangeSize)
    {
        var size = base.ArrangeOverride(arrangeSize);
        var children = Children.ToList();
        EnsureLines(children.Count);
        for (var i = 0; i < _lines.Count; i++)
        {
            var child = children[i];
            var x = child.TransformToAncestor(this).Transform(new Point(child.ActualWidth, 0)).X + child.Margin.Right;
            var rect = new Rect(x, -Margin.Top, 1, size.Height + Margin.Top + Margin.Bottom);
            var line = _lines[i];
            line.Measure(rect.Size);
            line.Arrange(rect);
        }
        return size;
    }
受保护的替代尺寸ArrangeOverride(尺寸arrangeSize)
{
变量大小=基本.ArrangeOverride(arrangeSize);
var children=children.ToList();
EnsureLines(children.Count);
对于(变量i=0;i<\u lines.Count;i++)
{
var child=childs[i];
var x=child.TransformToAncestor(this).Transform(新点(child.ActualWidth,0)).x+child.Margin.Right;
var rect=新的rect(x,-Margin.Top,1,size.Height+Margin.Top+Margin.Bottom);
变量行=_行[i];
测线(直线尺寸);
行。排列(rect);
}
返回大小;
}
然后将其用于ListViewItem模板

        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Margin" Value="2,0,0,0"/>
                <Setter Property="Padding" Value="0,2"/>
                <Setter Property="BorderBrush" Value="LightGray"/>
                <Setter Property="BorderThickness" Value="0,0,0,1"/>
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Border BorderBrush="{TemplateBinding BorderBrush}" 
                                    BorderThickness="{TemplateBinding BorderThickness}" 
                                    Background="{TemplateBinding Background}">
                                <GridLines:GridViewRowPresenterWithGridLines 
                                    Columns="{TemplateBinding GridView.ColumnCollection}"
                                    Margin="{TemplateBinding Padding}" />
                            </Border>
                        </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>
        </ListView.ItemContainerStyle>


迟交答案,但可能对某人有所帮助:

首先创建celltemplate边框的样式,如下所示:

 <Style x:Key="BorderStyle" TargetType="{x:Type Border}">
     <Setter Property="BorderThickness" Value="0,0,1,0"></Setter>
     <Setter Property="BorderBrush" Value="Black"></Setter>
     <Setter Property="Margin" Value="0,0,-7,0"></Setter>
 </Style>
 <DataTemplate x:Key="_SomeColumnCellTemplate">
     <Border Style="{StaticResource BorderStyle}">
        <DockPanel Margin="5,0,0,0">
           <TextBlock Text="{Binding Name}" Margin="5,0,0,0"/>
        </DockPanel>
     </Border>
  </DataTemplate>
  <Style x:Key="_ItemContainerStyle" TargetType="{x:Type ListViewItem}">
     <Setter Property="HorizontalContentAlignment" Value="Stretch" />
     <Setter Property="VerticalContentAlignment" Value="Stretch" />
  </Style>

然后按如下方式设置itemcontainer样式:

 <Style x:Key="BorderStyle" TargetType="{x:Type Border}">
     <Setter Property="BorderThickness" Value="0,0,1,0"></Setter>
     <Setter Property="BorderBrush" Value="Black"></Setter>
     <Setter Property="Margin" Value="0,0,-7,0"></Setter>
 </Style>
 <DataTemplate x:Key="_SomeColumnCellTemplate">
     <Border Style="{StaticResource BorderStyle}">
        <DockPanel Margin="5,0,0,0">
           <TextBlock Text="{Binding Name}" Margin="5,0,0,0"/>
        </DockPanel>
     </Border>
  </DataTemplate>
  <Style x:Key="_ItemContainerStyle" TargetType="{x:Type ListViewItem}">
     <Setter Property="HorizontalContentAlignment" Value="Stretch" />
     <Setter Property="VerticalContentAlignment" Value="Stretch" />
  </Style>

最后引用listview项容器样式资源,如下所示(我在代码中跳过了绑定listview项源代码):


详细说明我的-(必须在右边空白处使用-8)


结果:

我很高兴你解决了这个问题,但我真正希望的是像
GridLines=“Vertical”
这样的东西。你不会相信,但我也希望如此。我花了半天的时间来寻找并找出解决方案,而不是花5秒钟来写GridLines=“Vertical”。对于GridLines=“Vertical”这样简单的东西,我只花了+1。另一个Microsoft WPF失败。对于第二个链接中的解决方案,最后一行缺少底线。一个小小的调整是将单元格的边框设置为“1,0,0,0”(仅左侧),将最后一列的边框设置为“1,0,1,0”(或“1,0”)的左侧和右侧,然后还将边框笔刷+边框厚度添加到ListView.ItemContainer样式为“0,0,0,1”-即单元格负责垂直线,行(ItemContainer)负责水平线。我将添加一个带有代码示例的答案。