C# Silverlight TreeView滚动条消失在StackPanel中

C# Silverlight TreeView滚动条消失在StackPanel中,c#,silverlight,C#,Silverlight,我正在构建一个项目,将数据从Web服务加载到TreeView控件中。当TreeView单独包含在LayoutRoot网格上且其高度设置为Auto时,如果内容超出TreeView滚动条的垂直或水平限制,则会如预期的那样自动显示 如果将相同的TreeView控件放置在StackPanel中,则其行为会发生变化。当数据扩展超过其限制时,不会出现滚动条,数据只是从边缘剪辑下来,无法访问。如果在此场景中手动设置TreeView的高度,滚动条将按预期再次出现 很明显,StackPanel和TreeView之

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

如果将相同的TreeView控件放置在StackPanel中,则其行为会发生变化。当数据扩展超过其限制时,不会出现滚动条,数据只是从边缘剪辑下来,无法访问。如果在此场景中手动设置TreeView的高度,滚动条将按预期再次出现

很明显,StackPanel和TreeView之间似乎存在一些我没有看到的交互

有人能解释这一点,并提出适当的处理方法吗

根据评论中的请求:

以下XAML工作正常,并按预期呈现滚动条(请注意,树视图上的高度已指定):


下面还会按预期显示滚动条(请注意,没有StackPanel,但TreeView的高度设置为Auto):


最后,此代码失败,因为TreeView不会显示滚动条和数据滚动条(请注意,TreeView位于StackPanel中,TreeView的高度设置为Auto):


干杯


Steve

Yeh-StackPanels似乎不是包含可变大小对象的好控件


同样地;我在stackpanel中使用由TextBlock组成的DataTemplates时遇到了问题,它被用作ListBox中的ListItem模板。其目的是让文本块换行,但它只是继续超出列表框的边界,而列表框没有水平滚动。到目前为止,我能做的最好的事情就是固定包含stackpanels的网格的宽度,但还没有找到令人满意的解决方案。。我很想知道是否有

在Silverlight.net论坛的帮助下,成功地解决了这个问题。你可以阅读原始问题和答案。事实证明,垂直方向(defaul方向)的StackPanel将为其子级提供无限大小,因此由于TreeView具有无限大小,滚动条将永远不会显示。当使用栅格作为布局元素时,不会发生这种情况

以下XAML将按预期呈现TreeView滚动条。(请注意,TreeView包含在网格的第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>


如果能提供一些XAML示例,说明哪些是有效的,哪些是无效的,那将非常有帮助。Nick,我刚刚读到一篇文章说,垂直对齐的StackPanel将允许子对象具有无限高,这将阻止滚动条出现。我要检查一下,然后回来。
        <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                 x:Name="CodeBookIndexTreeView" Height="Auto" />
<StackPanel >
                <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                         x:Name="CodeBookIndexTreeView" Height="Auto" />
    </StackPanel>
<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>