Windows商店应用程序中StackPanel项之间间距过大。

5

我想将一些TextBlock水平排列,没有任何间距。我发现我的TextBlock大小正好,但是出于某种原因,周围添加了很多空白空间。我认为这与ListView或其样式有关,但我不知道具体原因。

enter image description here

我有以下布局:

<ListView Width="Auto" SelectionMode="None" Background="#654321" ItemsSource="{Binding}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border Background="Black">
               <TextBlock Text="{Binding}" Margin="0,0,0,0"/>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>
    <x:String>A</x:String>
    <x:String>B</x:String>
    <x:String>C</x:String>
    <x:String>D</x:String>
    <x:String>E</x:String>
</ListView>
2个回答

4
你需要更改的是ItemContainerStyle。你可以从这里获取Style
需要注意的重要一点是,Style的默认Margin是:
<Setter Property="Margin" Value="0,0,18,2"/>

这就解释了巨大的差距。请将其改为:

<Setter Property="Margin" Value="0,0,0,2"/>

那应该有助于解决您的问题。

最后需要注意的一点是,如果使用ListViewItemsPresenter,它们还具有默认的ContentMargin="4",或者在样式中有许多Margin值为4(特别是在Border上),您可能也需要更改这些。


很好,通过ItemContainerStyle设置ListViewItemMargin已经去掉了边距,但是项目本身仍然太大。 - Axarydax
1
开始从样式定义中删除一些内容。首先,有一些透明的内容,比如PlaceholderTextBlock,它会添加你本来不会使用的空间(比如g字母下方的文本)。另外,请确保修改了所有存在的Margin和Padding实例。在我看来,使用基本的ItemsControl可能会更容易,而不是使用ListView - Nate Diamond

3
另一个角度来看 - ListView 实际上被设计成一种控件,您可以点击、选择、拖动和与其中的项进行交互。如果您想要删除所有确保大小适合粗手指触摸的功能,那么您最好使用基本的 ItemsControlListBox,它们可能没有这些限制。如果您去掉所有边距并使您的项非常小 - 使用ListView 没有意义,这只会使事情复杂化并且性能变差。

使用ListBox比试图将ListView强制符合要求更容易(也更正确),感谢。 - Axarydax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接