16

我想更改 listView 中项目之间的间距(也许我应该使用另一个视图元素?)代码如下所示:

    <ListView SelectionMode="None" HorizontalContentAlignment="Left" >
        <ListView.Items>
            <TextBlock Text="Item 1" />
            <TextBlock Text="Item 2" />
            <TextBlock Text="Item 3" />
            <TextBlock Text="Item 4" />
        </ListView.Items>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" HorizontalChildrenAlignment="left"/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

我想尽可能多地模仿普通的stackpanel(可以包装元素)。目前,物品之间的空间(水平空间)太大了。我以前的问题-> Windows 8 WrapPanel

提前致谢

4

5 回答 5

30

您将需要对默认模板进行更改。如果您只想进行简单的更改,例如填充和边距,那么您可以这样做:(测试了代码并且应该可以工作)

            <ListView>
        <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapGrid Orientation="Horizontal" HorizontalChildrenAlignment="left"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="Padding" Value="0"/>
                    <Setter Property="Margin" Value="0"/>
                </Style>
            </ListView.ItemContainerStyle>
            <ListViewItem>
                <TextBlock Foreground="Wheat">hej</TextBlock>
            </ListViewItem>
            <ListViewItem>
                <TextBlock Foreground="Wheat">hej</TextBlock>
            </ListViewItem>
        </ListView>

要获得更多控制权,请通过在设计器中选择 listviewitem 并右键单击来复制整个默认模板。选择编辑模板,编辑副本。这将生成默认模板,您可以在那里进行更改。您可以对 listviewcontainer 执行相同的操作。您也可以使用 Blend 来做到这一点。

我在这里添加了描述和图像(如何编辑默认模板)

让我知道它是怎么回事,如果你有更多问题!祝你好运!

编辑:

MemeDeveloper 在下面提到他仍然遇到问题并通过调整其他一些属性来解决它 - 他在这里发布了代码和答案,请务必查看。

于 2012-07-22T00:43:34.310 回答
20

据我所知(windows8.1 xaml store app),将这两个设置为零后

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

我仍然有令人沮丧的差距,我似乎无法摆脱。

在这里使用负边距可能对你有用,但是......它很老套,很难使用,并且并不总是会导致预期的结果

拔掉头发后,我发现这些人解决了这个问题,即

ContentMargin="0" 填充="0"

ListViewItemPresenter中如下:

        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Padding" Value="0" />
                <Setter Property="Margin" Value="0" />
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="VerticalContentAlignment" Value="Top" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <ListViewItemPresenter ContentMargin="0" Padding="0" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>

希望这可以避免其他人在键盘上反复砸头;)

于 2014-05-22T22:14:05.387 回答
11

我认为这里要修改的正确 ItemContainerStyle 属性是MinHeight,而不是 Margin 或 Padding。

于 2015-11-10T06:18:12.507 回答
2

您需要编辑 ListBox.ItemContainerTemplate 属性。Blend 或 VS 视觉设计器帮助提取它进行修改。

于 2012-07-21T20:28:27.077 回答
1

用于消除 Windows 8.1 商店应用程序的 GridView 项目中的边距的解决方案。受上述 ListView 解决方案的启发。

<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GridViewItem">
                <GridViewItemPresenter ContentMargin="0" Padding="0"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
</GridView.ItemContainerStyle>
于 2014-11-19T10:19:38.080 回答