如何消除Win7中ListViewItems之间的差距

时间:2011-09-14 10:22:40

标签: wpf listview windows-7 windows-xp

我在WinXP下开发了一个WPF应用程序,我的ListView有我预期的布局。在Win7下启动相同的软件后,我看到ListViewItems在每一行之间有一个小的间隙。 我为每个元素使用了Margin和Padding,但是我找不到一个解决方案,在WinXP和Win7下布局是相同的,而无需编写单独的代码。
我认为它与当前的Windows主题有关,但我无法理解。有人有提示吗?

截图WindowsXP
Layout XP

截屏Windows 7
Layout 7

这是我使用的一些(简化的)XAML

<ListView x:Name="ListView">
    <ListView.Resources>
        <Style x:Key="CellBorderStyle" TargetType="{x:Type Border}">
            <Setter Property="BorderThickness" Value="0,0,1,1"></Setter>
            <Setter Property="BorderBrush" Value="LightGray"></Setter>
            <Setter Property="Margin" Value="-6,0,-6,0"></Setter>
        </Style>
        <DataTemplate x:Key="NameTemplate">
            <Border Name="NameBorder" Style="{StaticResource CellBorderStyle}">
                <TextBlock>MyName</TextBlock>
            </Border>
        </DataTemplate>
        <DataTemplate x:Key="AddressTemplate">
            <Border Name="AddressBorder" Style="{StaticResource CellBorderStyle}" Background="LightSteelBlue">
                <TextBlock>MyAddress</TextBlock>
            </Border>
        </DataTemplate>
        <DataTemplate x:Key="StreetTemplate">
            <Border Name="StreetBorder" Style="{StaticResource CellBorderStyle}" Background="LightGreen">
                <TextBlock>MyStreet</TextBlock>
            </Border>
        </DataTemplate>
        <DataTemplate x:Key="CityTemplate">
            <Border Name="CityBorder" Style="{StaticResource CellBorderStyle}">
                <TextBlock>MyCity</TextBlock>
            </Border>
        </DataTemplate>
    </ListView.Resources>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
            <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="Name" x:Name="colName"
                            CellTemplate="{StaticResource NameTemplate}"></GridViewColumn>
                <GridViewColumn Header="Address" x:Name="colAddress" 
                            CellTemplate="{StaticResource AddressTemplate}"></GridViewColumn>
                <GridViewColumn Header="Street" x:Name="colStreet" 
                            CellTemplate="{StaticResource StreetTemplate}"></GridViewColumn>
                <GridViewColumn Header="City" x:Name="colCity" 
                            CellTemplate="{StaticResource CityTemplate}"></GridViewColumn>
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

2 个答案:

答案 0 :(得分:1)

您还必须更改边框顶部和底部边距:

enter code here
        <Setter Property="Margin" Value="-6,0,-6,0"></Setter>
to:
        <Setter Property="Margin" Value="-6,-3,-6,-3"></Setter>

答案 1 :(得分:0)

如果将重点放在列表视图上,则需要额外的空间。

使用时会消失

<Setter Property="Focusable" Value="false"/>

在itemcontainerstyle