如何在WPF ListView+;GridView?

如何在WPF ListView+;GridView?,wpf,xaml,Wpf,Xaml,我正在尝试用ListView+GridView替换DataGrid。不幸的是,它看起来完全不同,我对样式了解不够,无法进行所有更改。我弄清楚了列标题,但是单元格的样式更难实现 编辑:这个问题本质上与“如何获得垂直网格线?”相同,因为我可以通过使用边距获得行之间的空间。因此,微软似乎忘记了GRIDVIEW中最重要的功能:使其成为网格的功能 <Window x:Class="MyApplication.UI.Dialogs.SomeWindow" xmlns="http://s

我正在尝试用ListView+GridView替换DataGrid。不幸的是,它看起来完全不同,我对样式了解不够,无法进行所有更改。我弄清楚了列标题,但是单元格的样式更难实现

编辑:这个问题本质上与“如何获得垂直网格线?”相同,因为我可以通过使用边距获得行之间的空间。因此,微软似乎忘记了GRIDVIEW中最重要的功能:使其成为网格的功能

<Window x:Class="MyApplication.UI.Dialogs.SomeWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525" Background="{DynamicResource Theme.TreeView.Background}">
  <Window.Resources>
    <Style TargetType="{x:Type GridViewColumnHeader}" >
      <Setter Property="FontWeight" Value="{StaticResource Theme.DataGrid.ColumnHeader.FontWeight}"/>
      <Setter Property="BorderBrush" Value="Transparent"/>
      <Setter Property="Padding" Value="{StaticResource Theme.DataGrid.Cell.Padding}"/>
      <Setter Property="Background" Value="{StaticResource Theme.DataGrid.ColumnHeader.Background}"/>
      <Setter Property="Foreground" Value="{StaticResource Theme.DataGrid.ColumnHeader.Foreground}"/>
    </Style>
    <Style TargetType="{x:Type ListView}" >
      <Setter Property="BorderThickness" Value="{DynamicResource Theme.DataGrid.BorderThickness}"/>
    </Style>
    <Style TargetType="{x:Type ListViewItem}" >
      <Setter Property="Background" Value="White" />
      <Setter Property="Foreground" Value="{DynamicResource Theme.DataGrid.Row.Foreground}" />
      <Setter Property="VerticalAlignment" Value="Stretch"></Setter>
      <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
      <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>
      <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
      <Setter Property="Padding" Value="{DynamicResource Theme.DataGrid.Cell.Padding}"></Setter>
    </Style>
  </Window.Resources>
  <StackPanel>
    <ListView Margin="10" ItemsSource="{Binding Users}">
      <ListView.View>
        <GridView >
          <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
          <GridViewColumn Header="Age"  DisplayMemberBinding="{Binding Age}" />
          <GridViewColumn Header="Mail"  DisplayMemberBinding="{Binding Mail}" />
          <GridViewColumn Header="Group"  DisplayMemberBinding="{Binding Group}" />
        </GridView>
      </ListView.View>
    </ListView>
  </StackPanel>
</Window>


那么如何在每个单元格周围设置空间(例如,每侧2个)?

不幸的是,一旦您使用
DisplayMemberBinding
,其他所有内容(包括单元格样式)都将被完全忽略。您可以(也可能必须)手动定义所有列,例如:

<GridViewColumn Header="Name">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Margin="4" Text="{Binding Name}"/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

有关样式/模板优先级的详细信息:

以下属性均用于定义列单元格的内容和样式,并按优先级从高到低列出:

  • DisplayMemberBinding
  • 细胞模板
  • CellTemplateSelector

理论上,每个列表项的样式可以如下所示:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="Margin" Value="50,0"></Setter>
    </Style>
</ListView.ItemContainerStyle>

但不幸的是,这只会使所有列不对齐,因此这种方法对于边距/填充并不是很有用


谢谢你的回答。这个问题最初问得很糟糕。请参阅我的编辑。我真正需要的是垂直网格线。我的意思是,每个单元格的左右两侧都有空格,基本颜色(例如灰色)与列边框对齐。所以我希望gridview像它应该的那样工作:一个网格。@charm-Oooooh,我把注意力集中在实际的问题上(“那么如何在每个单元格周围设置空间(例如,每侧2个)?”)。恐怕您也会遇到同样的问题-GridViewRowPresenter不太可调整。。。