在WrapPanel中隐藏对象/用户控件?

时间:2012-03-05 22:29:05

标签: vb.net silverlight user-controls stackpanel wrappanel

我有一个WrapPanel,其中包含多个不同的自定义UserControls。根据具体情况,我可能需要过滤掉哪些UserControls可见。我的目标是通过显示/隐藏需要过滤的控件来切换哪些控件在运行中可见 - 从而将显示的控件移到面板的左上角。

现在,当我不希望它们出现时,我只是将控件的Visibility属性设置为Visibility.Collapsed。我之所以这么认为,因为我使用的是WrapPanel,其余的控件将转移到面板的左上角。

相反,在隐藏了一些UserControls之后,仍然可以看到 的控件完全停留在之前的位置,并且我仍然在显示的控件之间留下间隙。我已经在 Silverlight Spy 中打开了我的应用,它显示UserControls实际上仍然存在(这是有意义的),但它只是不可见。

所以我的问题是: 有没有办法可以在UserControls中显示/隐藏WrapPanel,让仍然可见 UserControls滑到新位置(所有这些都转移到左上角 - 类似于StackPanel)?

我一直在讨论从UserControls完全删除WrapPanel(我认为这会起作用)并将它们存储在内存中直到需要它们为止。然后,如果我想显示/隐藏其他控件,我会从内存中的对象中获取它们。看来应该有更好的方法来做到这一点。

如果有人有任何建议或意见,我们将不胜感激。谢谢!

-Lloyd

更新:

XAML:(非常简单)

<toolkit:WrapPanel x:Name="MyLayout" Height="300" HorizontalAlignment="Left" VerticalAlignment="Top" Width="400" />

代码隐藏: UserControls正在动态添加:

MyLayout.Children.Add(oUserControl)

他们也开始动态崩溃:

oUserControl.Visibility = Visibility.Collapsed

1 个答案:

答案 0 :(得分:0)

我想我发现了问题。我们最近将WrapPanel添加到了ScrollViewer,而当我将ScrollViewer推出时 我能够实现我想要的功能。

我不确定为什么ScrollViewer会产生这种效果?

另外,我发现我可以保留ScrollViewer ,只需在.Measure()上调用WrapPanel即可更新布局。

这两种方案都没有100%对我有意义,但它们似乎都有效。