Silverlight滚动查看器不会显示绑定树视图

问题描述:

我有一个4行,1列Grid包装在ScrollViewer中。 行是Treeview绑定到对象的层次结构(嵌套列表)。 我正在使用HierarchicalDataTemplate布局TreeViewItem节点及其子/ ItemTemplates。Silverlight滚动查看器不会显示绑定树视图

我的问题是,每当我展开TreeViewItems,垂直滚动条是而不是显示出来。 奇怪的是,当我展开属于子节点一部分的AccordionItem时,水平滚动条将显示

我已经尝试创建一个事件处理程序,每当TreeViewItem被展开时调用UpdateLayout(),但这不会导致滚动条出现。我曾尝试对TreeView,Grid和ScrollViewer调用UpdateLayout()。

经过一番实验,这个答案变得非常明显。

指定高度 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的高度是我发现的唯一方法,使所有的一切按预期工作。

另外,还可以设置行定义:

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

树形视图将屏幕的*空间,表现出必要时滚动条。