【问题标题】:ListBox internal layoutListBox 内部布局
【发布时间】:2013-08-27 01:38:45
【问题描述】:

我的 WPF 应用程序有一个 ListBox,其 ItemTemplate 如下所示:

<DataTemplate x:Key="DomainTemplate" DataType="DomainViewModel">
    <Border BorderBrush="{Binding Converter={StaticResource BrushConverter}, Path=IsSelected}"
            BorderThickness="3"
            Grid.Column="0"
            Name="SelectedBorder"
            Padding="5">
        <Button Click="SelectDomain_Click"
                FontSize="16"
                FontWeight="Bold"
                IsEnabled="{Binding Path=CurrentSiteIsValid, RelativeSource={RelativeSource AncestorType={x:Type c:DomainPicker}}}"
                MinHeight="60"
                Tag="{Binding Path=DomainId}"
                Width="120">
            <TextBlock Text="{Binding Path=Name}"
                       TextAlignment="Center"
                       TextWrapping="WrapWithOverflow" />
        </Button>
    </Border>
</DataTemplate>

窗口的宽度由ListBox 的宽度决定。这是设计使然。 ListBox 的垂直边缘和其中的项目之间似乎有一个非常大的空间。使用 Snoop,我看到 ListBoxItem 包含与 ListBox 相同宽度的 BorderMargin 为 0,Padding 设置为 2,0,0,0。

Border 包含一个 ContentPresenter,其宽度比包含它的 Border 小 29 个单位。 Border 上的 Padding 似乎占了 2 个单位。它的Margin 为0,没有填充属性。

如果我可以不让模板中的Buttons 更窄的话,我实际上想让这个窗口更窄一些。那 29 个单位的空间是从哪里来的?有没有办法改变它的大小?

【问题讨论】:

  • 如果我理解正确,您可能需要将 ItemContainerStyle 设置为 show here

标签: wpf layout listbox listboxitem


【解决方案1】:

我也遇到过这个问题,我使用 WrapPanel 作为 ListBox 的 ItemPanel,由于您提到的问题,在某些情况下我最终在项目之间出现了间隙。这是修复:

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

【讨论】:

  • 谢谢。我试试看。
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多