2011-11-19 10 views
14

Ho uno spazio extra intorno al mio listbox. E '1px di larghezza, ma non so da dove viene ...Rimuovi spazio extra attorno a Listbox

The black arrows show the extra space

ho impostato l'imbottitura, il margine e BorderThickness di entrambi, ListBox e il ListBoxItem a 0.

Questo è il 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> 

Cosa mi manca?

risposta

10

Il modello di controllo di un ListBox si presenta così:

<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, è tutto! Ho applicato questo modello e ora funziona tutto bene! http://msdn.microsoft.com/de-de/library/ms754242(v=vs.90).aspx –

+0

@DanielGilbert: lol @ collegamento tedesco, tuttavia il tuo nome non suona molto tedesco. –

+0

Ups - ho dimenticato quella localizzazione. ^^ Yepp, la gente incappa spesso su questo. : P –

22

Questo è il modello di controllo di default per 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> 

Avviso L'imbottitura = "1", a bordo di nome Bd. Dato che questo è harcoded e non legato al template, puoi ridimensionare il ListBox e impostare il padding su 0, o poiché Padding su ScollViewer ha un TemplateBinding per il Padding del ListBox, puoi impostare il Padding sul tuo ListBox su -1 per compensare il riempimento sul bordo.

+4

Grazie per aver menzionato il "-1". :) –