XAML Windows8列表视图和项目间距

2uluyalo  于 2022-12-25  发布在  Windows
关注(0)|答案(6)|浏览(112)

我想更改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(可以 Package 元素)。目前的项目之间的空间(水平空间)太大了。我之前的问题-〉Windows 8 WrapPanel
先谢了

tjvv9vkg

tjvv9vkg1#

您需要对默认模板进行更改。如果您只想进行简单的更改,如填充和边距,则可以执行以下操作:(已测试代码,应该可以工作)

<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在下面提到,他仍然有问题,并通过调整一些其他属性来解决它-他在这里发布了代码和答案,请务必看看。

fcwjkofz

fcwjkofz2#

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

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

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

此处使用负边距可能对您有用,但是......它很笨拙,很难处理,并且不会总是产生预期的结果

拔了我的头发后,我发现这个问题已经解决了。

内容边距=“0”填充=“0”

列表视图项目演示者中,如下所示:

<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>

希望这能让别人避免在键盘上反复砸自己的头;)

pbpqsu0x

pbpqsu0x3#

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

x6492ojm

x6492ojm4#

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

7bsow1i6

7bsow1i65#

用于消除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>
s3fp2yjn

s3fp2yjn6#

对于WinUI3,这几行代码帮助我消除了行与行之间的空格:

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

我希望能帮助别人。

相关问题