【发布时间】:2012-03-05 22:29:04
【问题描述】:
我有一个WrapPanel,它将包含几个不同的自定义UserControls。根据具体情况,我可能需要过滤出可见的UserControls。我的目标是我可以通过显示/隐藏需要过滤的控件来动态切换哪些控件可见 - 从而将左侧显示的控件移动到面板的左上角。
现在我只是将控件的Visibility 属性设置为Visibility.Collapsed,而我不希望它们出现。我以为因为我使用的是WrapPanel,所以其余的控件会移到面板的左上角。
相反,在隐藏了一些UserControls 之后,仍然可见的控件 仍然保持在原来的位置,而我在仍然显示的控件之间留下了间隙。我在 Silverlight Spy 中打开了我的应用程序,它显示 UserControls 实际上仍然存在(这是有道理的)但根本不可见。
所以我的问题是:
有没有一种方法可以在WrapPanel 中显示/隐藏UserControls,它允许仍然可见 UserControls 滑动到它们的新位置(全部移向左上角 - 类似于StackPanel)?
我曾讨论过从WrapPanel 中完全删除UserControls(我认为这可行)并将它们存储在内存中,直到需要它们为止。然后,如果我想显示/隐藏其他控件,我会从我的内存对象中获取它们。不过,似乎应该有更好的方法来做到这一点。
如果有人有任何建议或意见,将不胜感激。谢谢!
-劳埃德
更新:
XAML:(非常简单)
<toolkit:WrapPanel x:Name="MyLayout" Height="300" HorizontalAlignment="Left" VerticalAlignment="Top" Width="400" />
代码隐藏:正在动态添加用户控件:
MyLayout.Children.Add(oUserControl)
它们也被设置为动态折叠:
oUserControl.Visibility = Visibility.Collapsed
【问题讨论】:
-
将可见性设置为折叠应该可以工作(并且对我有用)。对我来说,将可见性设置为隐藏展示了您在上面遇到的情况。你能发布一些 xaml 吗?
-
对为什么 ScrollViewer 会产生这种影响有什么想法吗?
标签: vb.net silverlight user-controls stackpanel wrappanel