2011-04-12 46 views
0

我在Windows Phone 7應用程序的xaml頁面中有一個列表框。它從空白處開始,然後使用一些項目從Web服務中檢索項目後填充它。到目前爲止,所有工作都很好 - 列表中顯示的項目看起來都很好。我遇到的問題是當我嘗試拖動列表滾動到底部時(在模擬器中):我可以向下滾動,但只要釋放鼠標按鈕,列表就會彈回頂部,就好像我沒有滾動它。對於爲什麼會這樣表現的任何見解?W7P列表框不停留在模擬器中滾動

<Grid x:Name="ContentPanel" Grid.Row="2" Margin="0,0,0,0" Canvas.ZIndex="0"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> <!-- EDIT: the problem was "Auto" here should have been "*" --> 
    </Grid.RowDefinitions> 

    <!-- removed other element for brevity --> 

    <ListBox Name="InfoBoardListBox" Grid.Row="1" SelectionChanged="InfoBoardListBox_SelectionChanged" 
       Margin="0,0,0,0" FontSize="26.667" /> 
</Grid> 

並用於填充列表的方法:

foreach (InfoBoard entry in boards.Values) { 
     item = new ListBoxItem(); 
     item.Content = entry.Name; 
     item.Name = entry.Id.ToString(); //used to tell which entry was clicked 
     InfoBoardListBox.Items.Add(item); 
    } 

回答

3

嘗試第二行的高度設置爲*,而不是Auto;我認爲這與ListBox認爲它的大小和可用空間有關。

+0

這看起來已經解決了這個問題。我曾經找過一些關於'Auto'和'*'應該做什麼的信息,到目前爲止沒有運氣。從這個例子看來,'Auto'表示在初始頁面加載過程中計算一次大小,'*'表示只要發生了一些變化就可以計算出來。 – 2011-04-15 14:01:06

+0

在RowDefinition的上下文中,**自動**意味着使該行與內容一樣高,但不高於。 「星號」是可用空間的一部分(即在任何固定或自動高度行之後)。如果你有兩行都設置爲'*',那麼每個行都有一半的高度。這裏有一些文檔:http://msdn.microsoft.com/en-us/library/system.windows.gridunittype.aspx – 2011-04-15 14:37:16

+0

那是有道理的。由於ListBox沒有內容,因此ListBox的高度將被設置爲0左右,並且在添加項目或調整屏幕底部時不會調整大小。如果是後者,它總是會有足夠的空間(一些在屏幕外)顯示所有的項目,這將解釋它們回到原地。 *絕對是我想要的行爲:一個列表框,它佔據屏幕上的剩餘高度。 – 2011-04-21 02:24:11