Silverlight Scrollviewer未显示绑定树视图

时间:2012-07-30 21:05:29

标签: binding silverlight-4.0 treeview

我有一个包含在ScrollViewer中的4行1列Grid。 行是Treeviews,它们绑定到对象的层次结构(嵌套列表)。 我正在使用HierarchicalDataTemplate布置TreeViewItem节点及其子/ ItemTemplates。

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

我尝试创建一个事件处理程序,只要TreeViewItem被展开就调用UpdateLayout(),但这不会导致滚动条出现。我也试过对TreeView,Grid和ScrollViewer调用UpdateLayout()。

2 个答案:

答案 0 :(得分: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设置高度和最大高度。我还尝试创建一个事件,以便在网格高度发生变化时设置scrollviewer的高度,并在树视图项更改时触发级联UpdateLayouts()的事件。

在ScrollViewer上设置高度是我发现的唯一可以使一切按预期工作的方法。

答案 1 :(得分:0)

此外,您可以设置行定义:

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

树视图将占用屏幕的可用空间,必要时显示滚动条。