2010-04-29 31 views
6

Tôi nhận được một lượng lớn không gian trong hộp danh sách tùy chỉnh của mình nếu tôi thêm một mục có nhiều dòng văn bản. Tôi có thể làm gì để giải quyết vấn đề này?WPF Xóa Không gian Thêm ở dưới cùng của ListBox

alt text http://i39.tinypic.com/2ut6e6x.png

Mã của tôi

<!-- List Item Hover --> 
<LinearGradientBrush x:Key="MouseOverFocusStyle" StartPoint="0,0" EndPoint="0,1"> 
    <LinearGradientBrush.GradientStops> 
     <GradientStop Color="#FF013B73" Offset="0.501"/> 
     <GradientStop Color="#FF091F34"/> 
     <GradientStop Color="#FF014A8F" Offset="0.5"/> 
     <GradientStop Color="#FF003363" Offset="1"/> 
    </LinearGradientBrush.GradientStops> 
</LinearGradientBrush> 

<!-- List Item Selected --> 
<LinearGradientBrush x:Key="LostFocusStyle" EndPoint="0.5,1" StartPoint="0.5,0"> 
    <LinearGradientBrush.RelativeTransform> 
     <TransformGroup> 
      <ScaleTransform CenterX="0.5" CenterY="0.5"/> 
      <SkewTransform CenterX="0.5" CenterY="0.5"/> 
      <RotateTransform CenterX="0.5" CenterY="0.5"/> 
      <TranslateTransform/> 
     </TransformGroup> 
    </LinearGradientBrush.RelativeTransform> 
    <GradientStop Color="#FF091F34" Offset="1"/> 
    <GradientStop Color="#FF002F5C" Offset="0.4"/> 
</LinearGradientBrush> 

<!-- List Item Highlight --> 
<SolidColorBrush x:Key="ListItemHighlight" Color="#FFE38E27" /> 

<!-- List Item UnHighlight --> 
<SolidColorBrush x:Key="ListItemUnHighlight" Color="#FF6FB8FD" /> 

<Style TargetType="ListBoxItem"> 
    <EventSetter Event="GotFocus" Handler="ListItem_GotFocus"></EventSetter> 
    <EventSetter Event="LostFocus" Handler="ListItem_LostFocus"></EventSetter> 
</Style> 

<DataTemplate x:Key="CustomListData" DataType="{x:Type ListBoxItem}"> 
    <Border BorderBrush="Black" BorderThickness="1" Margin="-2,0,0,-1"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=ActualWidth}" /> 
      </Grid.ColumnDefinitions> 
      <Label 
        VerticalContentAlignment="Center" BorderThickness="0" BorderBrush="Transparent" 
        Foreground="{StaticResource ListItemUnHighlight}" 
        FontSize="24" 
        Tag="{Binding .}" 
        Grid.Column="0" 
        MinHeight="55" 
        Cursor="Hand" 
        FontFamily="Arial" 
        FocusVisualStyle="{x:Null}" 
        KeyboardNavigation.TabNavigation="None" 
        Background="{StaticResource LostFocusStyle}" 
        MouseMove="ListItem_MouseOver" 
        > 
       <Label.ContextMenu> 
        <ContextMenu Name="editMenu"> 
         <MenuItem Header="Edit"/> 
        </ContextMenu> 
       </Label.ContextMenu> 
       <TextBlock Text="{Binding .}" Margin="15,0,40,0" TextWrapping="Wrap"></TextBlock> 
      </Label> 
      <Image 
       Tag="{Binding .}" 
       Source="{Binding}" 
       Margin="260,0,0,0" 
       Grid.Column="1" 
       Stretch="None" 
       Width="16" 
       Height="22" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       /> 
     </Grid> 
    </Border> 
</DataTemplate> 

</Window.Resources> 

<Window.DataContext> 
<ObjectDataProvider ObjectType="{x:Type local:ImageLoader}" MethodName="LoadImages" /> 
</Window.DataContext> 


<ListBox ItemsSource="{Binding}" Width="320" Background="#FF021422" BorderBrush="#FF1C4B79" > 

<ListBox.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}">Transparent</SolidColorBrush> 

    <Style TargetType="{x:Type ListBox}"> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" /> 
     <Setter Property="ItemTemplate" Value="{StaticResource CustomListData }" /> 
    </Style> 

</ListBox.Resources> 

CodeBehind

public static class ImageLoader 
{ 
    public static List<String> LoadImages() 
    { 
     List<String> images = new List<String>(); 
     for (int x = 0; x < 10; x++) 
     { 
      if (x == 5) 
      { 
       images.Add("Test Test Test Test Test Test Test Test Test TestTest Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test" + x); 
      } 
      else 
      { 
       images.Add("Test " + x); 
      } 
     } 
     return images; 
    } 
} 

Trả lời

11

Hiện tại bạn đang cuộn mục theo mục.

Vấn đề là vì Kiểm tra 5 trong hộp danh sách của bạn là mục tiếp theo sẽ được hiển thị (và nó lớn hơn không gian trống được hiển thị trong ảnh bạn đã bao gồm). Chỉ khi không gian đó đủ lớn để Test 5 được hiển thị đầy đủ thì nó sẽ được hiển thị.

Tuy nhiên, nếu bạn muốn cuộn trơn tru thay vì mục theo mục cuộn, chỉ cần đặt thuộc tính ScrollViewer.CanContentScroll thành sai.

<ListBox ScrollViewer.CanContentScroll="False" ItemsSource="{Binding}" Width="320" Background="#FF021422" BorderBrush="#FF1C4B79" > 

Hy vọng điều đó sẽ hữu ích!

+1

Thay đổi kích thước thanh cuộn cố định của tôi và không gian trống ở dưới cùng. Cảm ơn rất nhiều vì đã giải thích. – Ryan

+0

Điều này sẽ vô hiệu hóa ảo hóa giao diện người dùng mặc dù. –

+0

@Stephen Drew - True nó sẽ vô hiệu hóa ảo hóa, với kích thước vật phẩm có chiều cao khác nhau và cố gắng để có được đại diện thích hợp trong scrollbar nó loại có ý nghĩa tại sao họ thiết kế nó theo cách ... nhưng đây là một câu trả lời từ gần 4 năm trước đây, và tôi tin rằng có một số tùy chọn khác với .NET 4.5: http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling – Scott

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