2010-10-18 95 views
0

給定以下XMAL爲什麼沒有垂直滾動條用於綁定到100個字符串的ObservableCollection的ListBox。如果我改變了第二行的高度從*到一些固定的像500,然後會出現一個滾動條,但很明顯,我想行高是什麼都可以(這是我的理解*的意思)爲什麼沒有此列表框的垂直滾動條

<UserControl x:Class="SimpleStack.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 
    <UserControl.Resources> 
     <DataTemplate x:Key="ListBoxItemTemplate"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Place holder"/><TextBlock Text="{Binding}"/> 
      </StackPanel> 
     </DataTemplate> 
    </UserControl.Resources> 
    <Grid x:Name="LayoutRoot" Background="Azure"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Text="The Text" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"/> 
     <ListBox ItemsSource="{Binding ListOfNumbers}" Grid.Row="1" Grid.Column="0" 
       ItemTemplate="{StaticResource ListBoxItemTemplate}"/> 
     <TextBlock Text="Place Holder" Grid.Row="1" Grid.Column="1"/> 
    </Grid> 
</UserControl> 

回答

1

*行高事實上「其他所有可用」(如果你有多個* s,它會把它分開)。我猜你的實際問題是「無論什麼」都是無限的。用戶控件很可能會被賦予無限的空間,因此它正在擴展以佔用儘可能多的空間。確保你限制你的用戶控件到實際的可見空間,你的列表框應該得到它的滾動條。

+0

它確實顯示我的UserControl正在被給予無限的空間,正如你所建議的那樣。 Howerver我不知道爲什麼會這樣?插件獲得100%x100%(VS測試頁面的SOP) – 2010-10-18 16:18:57

+0

是否有一種工具可以在運行時調查佈局,類似於IE開發人員工具? – 2010-10-18 16:20:58

+1

你的UserControl是應用程序的RootVisual還是包含在另一個頁面中?如果它包含在另一個頁面中,請檢查以確保其包含的面板不是「StackPanel」,這會導致它具有無限可用大小。 – Stephan 2010-10-18 16:43:14

1

我的理解是,由於度量/排列布局系統,您基本上可以告訴列表框,它可以擁有所需的所有垂直空間而不受約束。因此,默認列表框模板中的內部ScrollViewer從不受限制觸發滾動條出現。

我可以看到兩種方法來解決這個問題您的具體情況:

- 指定ScrollViewer.VerticalScrollBarVisibility="Visible"在列表框,迫使內部的ScrollViewer始終顯示滾動條。

- 使用一個實際的ScrollViewer包含列表框,並讓提供滾動能力,而不是一個內部列表框(您可能需要調整填充和邊框讓它右看看):

<ScrollViewer Grid.Row="1" Grid.Column="0"> 
    <ListBox ItemsSource="{Binding ListOfNumbers}" 
      ItemTemplate="{StaticResource ListBoxItemTemplate}"/> 
</ScrollViewer> 

我更喜歡第二種方式,因爲如果真的有必要,它只會顯示垂直滾動條。