2011-05-18 144 views
5

在我們的應用程序中,我們有一些ListViews和ListBoxes內部網格,您可以通過網格分隔器幫助更改控件的實際高度。 這樣做時,您可以安排ListBox的高度,因此其中一個項目不完全可見,因爲ListView變得很短以顯示它。防止WPF列表視圖或列表框顯示「一半」項目

這是我們不想要的行爲。

從我的研究到目前爲止似乎沒有辦法阻止ListBox或ListView顯示部分項目,但也許有人找到了另一種方法來處理這個問題。也許物品只有一半可見時纔會觸發自己。但是我們怎麼能發現?

我們歡迎任何建議。

+0

你爲什麼要防止顯示部分項目?只要列表是可滾動的,這對人們來說就是內容可以滾動的一個很好的指示器。 – 2011-05-18 19:45:02

回答

1

我不知道用這種方法修復ListView。不過,對於ListBox,您可以重寫ArrangeOverride並自己排列項目。堆疊您想要查看的項目,並排列您不希望看到的項目(例如,部分可見項目),以便它們不可見。例如,非虛擬化版本:

/// <summary> 
    /// Used to arrange all of the child items for the layout. 
    /// Determines position for each child. 
    /// </summary> 
    /// <param name="finalSize">Parent passes this size in</param> 
    /// <returns>Parent size (always uses all of the allowed area)</returns> 
    protected override Size ArrangeOverride(Size finalSize) 
    { 
     // Arrange in a stack 
     double curX = 0; 
     double curY = 0; 
     foreach (UIElement child in InternalChildren) 
     { 
      double nextY = curY + child.DesiredSize.Height; 
      if (nextY > finalSize.Height)   // Don't display partial items 
       child.Arrange(new Rect()); 
      else 
       child.Arrange(new Rect(curX, curY, child.DesiredSize.Width, child.DesiredSize.Height); 
      curY = nextY; 
     } 

     return finalSize; 
    } 
0

你只需要或了minHeight設置MinWidth到找你調整的單元格。試試這個:

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition MinHeight="50"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition MinHeight="50"/> 
     </Grid.RowDefinitions> 
     <ListBox HorizontalAlignment="Center" Margin="10"> 
      <ListBoxItem>First</ListBoxItem> 
      <ListBoxItem>Second</ListBoxItem> 
      <ListBoxItem>Third</ListBoxItem> 
      <ListBoxItem>Fourth</ListBoxItem> 
     </ListBox> 
     <GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
     <ListView Grid.Row="2" Margin="4"> 
      <ListViewItem>First</ListViewItem> 
      <ListViewItem>Second</ListViewItem> 
      <ListViewItem>Third</ListViewItem> 
      <ListViewItem>Fourth</ListViewItem> 
     </ListView> 
    </Grid>