Windows8 ListView和项目之间的空间

时间:2012-07-21 18:26:03

标签: xaml listview gridview windows-8 windows-store-apps

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

    <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(wchich可以包装元素)。目前项目之间的空间(水平空间)太大了。我之前的问题 - &gt; Windows 8 WrapPanel

提前致谢

5 个答案:

答案 0 :(得分:28)

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

            <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来完成此操作。

I've added a description and images here (how you can edit a default template)

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

编辑:

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

答案 1 :(得分:18)

据我所知(windows8.1 xaml商店应用),将这两个设置为零后

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

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

在这里使用负边距可能会为你做这件事,但是...它的hacky,难以使用,并且不会总是导致预期的结果

拔掉我的头发之后,我发现问题已经解决了这些人,即

<强> ContentMargin =&#34; 0&#34;填充=&#34; 0&#34;

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>

希望能避免其他人在键盘上反复砸他们的头;)

答案 2 :(得分:8)

我认为要修改的正确ItemContainerStyle属性是 MinHeight ,而不是边距或填充。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

用于消除Windows 8.1 Store App的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>