2012-07-30 73 views
0

我有一個4行,1列Grid包裝在ScrollViewer中。 行是Treeview綁定到對象的層次結構(嵌套列表)。 我正在使用HierarchicalDataTemplate佈局TreeViewItem節點及其子/ ItemTemplates。Silverlight滾動查看器不會顯示綁定樹視圖

我的問題是,每當我展開TreeViewItems,垂直滾動條是而不是顯示出來。 奇怪的是,當我展開屬於子節點一部分的AccordionItem時,水平滾動條將顯示

我已經嘗試創建一個事件處理程序,每當TreeViewItem被展開時調用UpdateLayout(),但這不會導致滾動條出現。我曾嘗試對TreeView,Grid和ScrollViewer調用UpdateLayout()。

回答

0

經過一番實驗,這個答案變得非常明顯。

指定高度 ScrollViewer的屬性是缺失的部分,它使所有的工作都像預期的那樣工作。

<ScrollViewer HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Auto" 
       Height="350"> <!-- THIS was the missing piece!! --> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <Controls:TreeView Grid.Row="0" ItemsSource="{Binding ListOne}" 
     ItemTemplate="{StaticResource ListOneTemplate}" > 
    </Controls:TreeView> 

    <Controls:TreeView Grid.Row="1" ItemsSource="{Binding ListTwo}" 
     ItemTemplate="{StaticResource ListTwoTemplate}" > 
    </Controls:TreeView> 

    </Grid> 
</ScrollViewer> 

FWIW,我嘗試了許多其他解決方案,包括爲Grid,GridRows和TreeView設置高度和最大高度。我也嘗試創建一個事件來設置每當網格高度發生變化時滾動查看器的高度,以及每當樹視圖項目發生更改時觸發級聯UpdateLayouts()的事件。

設置ScrollViewer的高度是我發現的唯一方法,使所有的一切按預期工作。

0

另外,還可以設置行定義:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> // tree view position 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

樹形視圖將屏幕的自由空間,表現出必要時滾動條。

相關問題