2009-01-28 67 views
2

我正在構建一個項目,該項目將webservice中的數據加載到TreeView控件中。如果TreeView自身包含在LayoutRoot網格中,並且其高度設置爲Auto,則如果內容超出樹視圖的垂直或水平極限,則會按預期自動出現滾動條。Silverlight TreeView ScrollBars在StackPanel中消失

如果同一個TreeView控件放置在StackPanel中,則會改變行爲。當數據超出限制時,不會出現滾動條,數據只會從邊緣切下,而無法訪問它。如果我在這種情況下手動設置TreeView的高度,滾動條將按預期再次出現。

很明顯,我沒有看到StackPanel和TreeView之間存在一些交互。

任何人都可以解釋這一點,並建議一個適當的方式來處理這種情況?

每請求評論:

下面的XAML正常工作,並預期使滾動條(注意在TreeView的高度爲指定):

<StackPanel > 
      <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
            x:Name="CodeBookIndexTreeView" Height="500" /> 
</StackPanel> 

下面還顯示滾動預期(公告沒有的StackPanel,但TreeView的高度設置爲自動):

 <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
           x:Name="CodeBookIndexTreeView" Height="Auto" /> 

最後,該代碼失敗,該樹視圖不會顯示一個滾動條第二關閉控制的底部和/或右手側的數據滾動(注意TreeView的是在一個StackPanel和TreeView的高度被設定爲自動):

<StackPanel > 
       <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
             x:Name="CodeBookIndexTreeView" Height="Auto" /> 
    </StackPanel> 

乾杯,

史蒂夫

+0

將XAML樣本包含在哪些工作中並且無法正常工作會非常有幫助。 – 2009-01-28 19:11:32

回答

4

管理得到這個人在Silverlight.net論壇的幫助下計算出來的。您可以閱讀原始問題並回答here。事實證明,一個垂直定向的StackPanel(默認方向)將給它的子元素賦予無限大小,所以既然TreeView具有無限大小,滾動條將永遠不會顯示。使用網格作爲佈局元素時,不會發生這種情況。

以下XAML將按預期呈現TreeView滾動條。 (請注意,TreeView包含在Grid的第2行中,而不是StackPanel中,並且TreeView的高度設置爲Auto。)此代碼片段中還有一些額外的控件,因爲這是該代碼片段中額外容器的原因第一名:

<Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <StackPanel Orientation="Horizontal" Grid.Row="0"> 
       <TextBlock Text="Enter Search Term" /> 
       <TextBox x:Name="SearchTermTextBox" Width="200" KeyUp="SearchTermTextBox_KeyUp"/> 
      </StackPanel> 
      <Button x:Name="SearchButton" Content="Search" Click="SearchButton_Click" Width="100" 
         HorizontalAlignment="Left" Grid.Row="1" /> 
      <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
            x:Name="CodeBookIndexTreeView" Height="Auto" Grid.Row="2" /> 
</Grid> 
0

Yeh - StackPanels似乎不太適合包含可變大小的對象。

類似地;我在一個StackPanel內的文本塊組成的DataTemplates中遇到了麻煩,用作ListBox中的ListItem模板。意圖是讓文本塊換行,但是它只是繼續超出列表框的範圍,沒有水平滾動。到目前爲止,我管理的最好的辦法是修復包含堆疊面板的網格的寬度,但尚未找到滿意的解決方案..想知道是否有一個!

+0

Nick, 我剛剛閱讀一篇文章,說一個垂直對齊的StackPanel將允許無限高度的子對象,在這種情況下woulkd會阻止滾動條出現。我要檢查一下,然後回來。 – 2009-01-28 20:15:21