我正在构建一个项目,将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>
干杯,
史蒂夫
答案 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模板。意图是文本块换行,但它只是继续超出列表框的边界,没有水平滚动。到目前为止,我所管理的最好的方法是修复包含堆叠面板的网格宽度,但尚未找到满意的解决方案..很想知道是否有一个!