2011-11-19 13 views
14

Mam więcej miejsca wokół mojego Listbox. To 1px szeroki, ale nie wiem, skąd pochodzi ...Usuń dodatkową przestrzeń wokół Listbox

The black arrows show the extra space

ustawić padding, margines i BorderThickness obu, ListBox i ListBoxItem do 0.

This to XAML:

<!-- NOTEBOX LISTBOX --> 

<!-- The Datatemplate for the Notebox - ListboxItem --> 
<DataTemplate x:Key="NoteListboxItemTemplate" DataType="ListBoxItem"> 
    <Border Style="{DynamicResource OuterNoteBoxBorder}"> 
     <Border Style="{DynamicResource SecondOuterNoteBoxBorder}"> 
      <StackPanel> 
       <TextBlock Grid.Column="0" Foreground="#225588" Text="{Binding Title}" Style="{DynamicResource PlayListListBoxTitleLabel}" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" ></TextBlock> 
       <ContentPresenter Content="{Binding NoteView}"></ContentPresenter> 
       <TextBlock Grid.Column="1" Foreground="Black" Text="{local:CultureAwareBinding CreationDate, StringFormat={}{0:F}}" Style="{DynamicResource PlayListListBoxTitleLabel}"></TextBlock> 
      </StackPanel> 
     </Border> 
    </Border> 
</DataTemplate> 

<!-- The Itemtemplate for the Notebox - ListboxItem --> 
<Style x:Key="NoteboxListItemTemplate" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Margin" Value="0" /> 
    <Setter Property="Padding" Value="0" /> 
    <Setter Property="Foreground" Value="Black" /> 
    <Setter Property="Background" Value="White" /> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
         <!--<Setter Property="Background" TargetName="Bd" Value="#66000000"/> 
         <Setter Property="BorderBrush" Value="#000000" />--> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="true"/> 
          <Condition Property="Selector.IsSelectionActive" Value="false"/> 
         </MultiTrigger.Conditions> 
         <!--<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>--> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
        </MultiTrigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#88000000"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/> 
    </Style.Resources> 
</Style> 

<!-- The Border-Template for our Notebox - ListboxItem --> 
<Style x:Key="NoteboxListItemBorderTemplate" TargetType="{x:Type Border}"> 
    <Setter Property="Background" Value="#CCFFFFFF" /> 
    <Setter Property="Margin" Value="0" /> 
    <Setter Property="Padding" Value="0" /> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#88000000"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#44000000"/> 
    </Style.Resources> 
</Style> 

<!-- Notebox - Listbox Template --> 
<Style x:Key="NoteboxListboxTemplate" TargetType="{x:Type ListBox}"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="BorderBrush" Value="Transparent" /> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Setter Property="Padding" Value="0" /> 
    <Setter Property="Margin" Value="0" /> 
</Style> 


     <ListBox Grid.Column="1" 
      Grid.Row="0" 
      Background="Black" 
      MouseDoubleClick="ListBox_MouseDoubleClick" 
      HorizontalContentAlignment="Stretch" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
      ItemContainerStyle="{DynamicResource NoteboxListItemTemplate}" 
      VirtualizingStackPanel.VirtualizationMode="Recycling" 
      VirtualizingStackPanel.IsVirtualizing="True" 
      ItemsSource="{Binding Notes, Mode=TwoWay}" 
      ItemTemplate="{DynamicResource NoteListboxItemTemplate}" 
      SelectedItem="{Binding SelectedNote}" 
      Style="{DynamicResource NoteboxListboxTemplate}"> 
    </ListBox> 

Czego mi brakuje?

Odpowiedz

10

Szablon kontrola ListBox wygląda następująco:

<ControlTemplate TargetType="{x:Type ListBox}"> 
    <Border Name="Bd" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      SnapsToDevicePixels="true" 
      Padding="1"> <!-- This might be the problem --> 
    <!-- ... --> 
+0

Yepp, to wszystko! Zastosowałem ten szablon i wszystko działa dobrze teraz! http://msdn.microsoft.com/de-de/library/ms754242(v=vs.90).aspx –

+0

@DanielGilbert: lol @ German link, twoje imię nie brzmi zbyt niemiecko. –

+0

Ups - zapomniałem o lokalizacji. ^^ Yepp, ludzie natkną się na to dość często. : P –

22

Jest to domyślny szablon kontroli ListBox:

<ControlTemplate x:Key="ListBoxControlTemplate1" TargetType="{x:Type ListBox}"> 
     <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="True"> 
      <ScrollViewer Focusable="False" Padding="{TemplateBinding Padding}"> 
       <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      </ScrollViewer> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
      </Trigger> 
      <Trigger Property="IsGrouping" Value="True"> 
       <Setter Property="ScrollViewer.CanContentScroll" Value="False"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

Wskazówka padding = "1" na granicy nazwie Bd. Ponieważ jest to harcoded, a nie szablon związany, możesz albo odwzorować ListBox i ustawić padding na 0, albo od Padding na ScollViewer ma TemplateBinding do Padding z ListBox, możesz ustawić Padding na twoim ListBox na -1 do zrównoważyć dopełnienie na granicy.

+4

Dzięki za wzmianka "-1". :) –

Powiązane problemy