首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight TreeView ScrollBars在StackPanel中消失

Silverlight TreeView ScrollBars在StackPanel中消失
EN

Stack Overflow用户
提问于 2009-01-28 19:08:38
回答 2查看 4.6K关注 0票数 2

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

如果将同一个TreeView控件放在StackPanel中,它的行为就会发生变化。当数据超出其限制时,不会出现滚动条,数据只是从边缘剪切掉,无法访问。在这种情况下,如果我手动设置TreeView的高度,滚动条将按预期再次出现。

显然,在StackPanel和TreeView之间似乎有一些我看不到的交互。

谁能解释一下这一点,并提出一个适当的方法来处理这种情况?

注释中的每个请求:

下面的XAML可以很好地工作,并按预期呈现滚动条(请注意,TreeView上的高度已指定):

代码语言:javascript
复制
<StackPanel >
            <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                     x:Name="CodeBookIndexTreeView" Height="500" />
</StackPanel>

下面的代码也会像预期的那样显示滚动条(请注意,没有StackPanel,但TreeView的高度设置为Auto):

代码语言:javascript
复制
        <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                 x:Name="CodeBookIndexTreeView" Height="Auto" />

最后,这段代码失败了,因为TreeView不会在控件的底部和/或右侧显示滚动条和数据滚动(请注意,TreeView在StackPanel中,TreeView的高度设置为Auto):

代码语言:javascript
复制
<StackPanel >
                <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                         x:Name="CodeBookIndexTreeView" Height="Auto" />
    </StackPanel>

干杯,

史蒂夫

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-28 20:40:31

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

下面的XAML将按预期呈现TreeView滚动条。(请注意,TreeView包含在网格的第2行中,而不是StackPanel中,并且TreeView的高度设置为自动。)这段代码中有一些额外的控件,因为这就是额外容器的原因:

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2009-01-28 19:38:23

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

类似地,我在使用由堆叠面板中的文本块组成的DataTemplates时遇到了问题,这些文本块用作ListBox中的ListItem模板。本意是让文本块换行,但它只是继续超出列表框的边界,因为列表框没有水平滚动。到目前为止,我所做的最好的事情就是固定包含堆叠面板的网格的宽度,但还没有找到一个令人满意的解决方案。我很想知道有没有!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/488923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档