我正在构建一个将数据从into服务加载到TreeView控件的项目。当TreeView本身包含在LayoutRoot网格中并且其高度设置为“自动”时,如果内容超出了treeview的垂直或水平限制,则会像预期的那样自动显示滚动条。
如果将同一个TreeView控件放在StackPanel中,它的行为就会发生变化。当数据超出其限制时,不会出现滚动条,数据只是从边缘剪切掉,无法访问。在这种情况下,如果我手动设置TreeView的高度,滚动条将按预期再次出现。
显然,在StackPanel和TreeView之间似乎有一些我看不到的交互。
谁能解释一下这一点,并提出一个适当的方法来处理这种情况?
注释中的每个请求:
下面的XAML可以很好地工作,并按预期呈现滚动条(请注意,TreeView上的高度已指定):
<StackPanel >
<controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}"
x:Name="CodeBookIndexTreeView" Height="500" />
</StackPanel>下面的代码也会像预期的那样显示滚动条(请注意,没有StackPanel,但TreeView的高度设置为Auto):
<controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}"
x:Name="CodeBookIndexTreeView" Height="Auto" />最后,这段代码失败了,因为TreeView不会在控件的底部和/或右侧显示滚动条和数据滚动(请注意,TreeView在StackPanel中,TreeView的高度设置为Auto):
<StackPanel >
<controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}"
x:Name="CodeBookIndexTreeView" Height="Auto" />
</StackPanel>干杯,
史蒂夫
发布于 2009-01-28 20:40:31
在Silverlight.net论坛的一些帮助下,我成功地解决了这个问题。您可以阅读原始问答here。事实证明,垂直方向(默认方向)的StackPanel将为其子对象提供无限大小,因此,由于TreeView的大小是无限的,因此滚动条永远不会显示。当使用网格作为布局元素时,不会发生这种情况。
下面的XAML将按预期呈现TreeView滚动条。(请注意,TreeView包含在网格的第2行中,而不是StackPanel中,并且TreeView的高度设置为自动。)这段代码中有一些额外的控件,因为这就是额外容器的原因:
<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>发布于 2009-01-28 19:38:23
Yeh - StackPanels似乎不是一个包含可变大小对象的很好的控件。
类似地,我在使用由堆叠面板中的文本块组成的DataTemplates时遇到了问题,这些文本块用作ListBox中的ListItem模板。本意是让文本块换行,但它只是继续超出列表框的边界,因为列表框没有水平滚动。到目前为止,我所做的最好的事情就是固定包含堆叠面板的网格的宽度,但还没有找到一个令人满意的解决方案。我很想知道有没有!
https://stackoverflow.com/questions/488923
复制相似问题