列表框项之间的垂直间隙(删除??)

时间:2016-03-10 12:26:27

标签: c# xaml listbox win-universal-app

我的列表框是使用DataTemplate进行数据绑定的对象列表驱动的数据,例如:

            <ListBox x:Name="TheMainListBox" 
                 ScrollViewer.IsVerticalRailEnabled="True" 
                 ScrollViewer.IsHorizontalRailEnabled="False" 
                 HorizontalAlignment="Left" 
                 VerticalAlignment="Top"
                 Height="540" 
                 ItemsSource="{Binding}"
                 Width="Auto"
                 Margin="0"
                 Padding="0"
                 Background="Yellow"
                 ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                 ScrollViewer.VerticalScrollBarVisibility="Auto" 
                 SelectionChanged="TheMainListBox_SelectionChanged" 
                 DoubleTapped="TheMainListBox_DoubleTapped"  
                 >

模板:

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid or Stackpanel Background="Blue"
                         Padding="0"                                    
                         BorderBrush="Black"
                         BorderThickness="1"
                         Margin="0"
                     >
                     .... Binding Textboxes/blocks
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>

我最终得到一个黄色容器,ListBox,..里面有蓝色矩形,ListBox项目,但它们之间有一个垂直间隙。我可以设置一个负的垂直上边距,但这是粗糙的,并不适用于顶部项目。如何将项目之间的垂直间隙减小到零。

如果创建一个带有静态项的ListBox,每个都在ListBoxItem容器中,例如:

                <ListBoxItem BorderThickness="1" Width="100" Height="50"
                  BorderBrush="Black" Background="Red"/>

一切都按要求运作。

那么如何通过ItemTemplate / DataBinding摆脱项目之间的垂直间距? 这是关键任务,提前做好。

3 个答案:

答案 0 :(得分:2)

我没有时间加载项目进行测试但你应该能够杀死可能导致它的边距/填充。所以添加;

<ListBox.ItemContainerStyle>
   <Style TargetType="ListBoxItem">
      <Setter Property="Padding" Value="0"/>
      <Setter Property="Margin" Value="0"/>
   </Style>
</ListBox.ItemContainerStyle>

答案 1 :(得分:0)

我还没有想到为什么会发生这种情况,还没有深入探讨风格,我的回答并不好看,但试试Margin="0,-2,0,-2"

            <DataTemplate>
                <Grid or Stackpanel Background="Blue"
                     Padding="0"                                    
                     BorderBrush="Black"
                     BorderThickness="1"
                     Margin="0,-2,0,-2"
                 >
                 .... Binding Textboxes/blocks
                </Grid>
            </DataTemplate>

答案 2 :(得分:0)

正确设置ListBoxItem的高度将解决问题。这是代码段

<ListBox.ItemContainerStyle>
 <Style TargetType="ListBoxItem">
   <Setter Property="Height" Value="Your_Desired_Height"/>
 </Style>
</ListBox.ItemContainerStyle>

对于列表框,请使用高度属性,对于列表视图,请使用MinHeight属性。替换Your_Desired_Height占位符中所需的高度值。