2011-11-19 42 views
14

Tôi có thêm khoảng trống xung quanh Listbox của mình. Đó là rộng 1px, nhưng tôi không biết nó đến từ đâu ...Xóa thêm khoảng trống xung quanh Listbox

The black arrows show the extra space

tôi đặt đệm, lề và BorderThickness của cả hai, ListBox và ListBoxItem đến 0.

này là 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> 

Tôi đang thiếu gì?

Trả lời

10

Việc kiểm soát mẫu của một ListBox trông như thế này:

<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, đúng vậy! Tôi đã áp dụng mẫu này và mọi thứ hoạt động tốt ngay bây giờ! http://msdn.microsoft.com/de-de/library/ms754242(v=vs.90).aspx –

+0

@DanielGilbert: liên kết lol @ German, tên của bạn không nghe tiếng Đức lắm. –

+0

Ups - quên mất nội dung bản địa hóa. ^^ Yepp, mọi người vấp ngã điều này khá thường xuyên. : P –

22

Đây là mẫu kiểm soát mặc định cho 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> 

Thông báo các Padding = "1" trên biên giới tên là Bd. Vì đây là harcoded và không mẫu bị ràng buộc, bạn có thể retemplate các ListBox và đặt padding là 0, hoặc kể từ Padding trên ScollViewer có một TemplateBinding Padding của ListBox, bạn có thể đặt Padding trên ListBox của bạn để -1 đến bù đắp padding trên biên giới.

+4

Cảm ơn bạn đã đề cập đến "-1". :) –

Các vấn đề liên quan