2013-08-23 82 views
0

我的WPF應用程序有一個ListBoxItemTemplate看起來是這樣的:列表框內部佈局

<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的垂直邊緣與其中的項目之間似乎有非常大的空間。使用探聽,我看到ListBoxItem包含Border也就是相同的寬度ListBox,具有爲0的Margin,和Padding設置爲2,0,0,0。

Border包含ContentPresenter,其寬度比包含它的Border小29個單位。 Border上的Padding似乎佔了2個單位。它的Margin是0,它沒有填充屬性。

其實我想提出這個窗口,如果我可以窄一點,而不在模板中的任何較窄使得Buttons。 29單位空間從哪裏來?有沒有辦法改變它的大小?

+0

如果我理解正確的話,你可能要設置ItemContainerStyle作爲表演[這裏](http://stackoverflow.com/a/2924249/187697)。 – keyboardP

回答

0

我碰到這個問題太中,我使用的WrapPanel作爲ListBox的ItemPanel,我結束了在某些情況下,項目之間的差距,由於你提到的問題。這裏是修復:

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

謝謝。我會試一試。 –