Silverlight TreeView ScrollBars在StackPanel内消失

时间:2009-01-28 19:08:38

标签: c# silverlight

我正在构建一个项目,将Web服务中的数据加载到TreeView控件中。当TreeView单独包含在LayoutRoot网格中并且其高度设置为“自动”时,如果内容超出树视图的垂直或水平限制,则会自动显示滚动条,如预期的那样。

如果将相同的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不会显示滚动条和数据滚动控件的底部和/或右侧(注意TreeView在StackPanel中,TreeView的高度设置为Auto):< / p>

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

干杯,

史蒂夫

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

Yeh - StackPanels似乎不是控制可变大小对象的好方法。

类似地;我遇到了由堆栈面板中的文本块组成的DataTemplates,在ListBox中用作ListItem模板。意图是文本块换行,但它只是继续超出列表框的边界,没有水平滚动。到目前为止,我所管理的最好的方法是修复包含堆叠面板的网格宽度,但尚未找到满意的解决方案..很想知道是否有一个!