我有一个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
答案 0 :(得分:0)
我想我发现了问题。我们最近将WrapPanel
添加到了ScrollViewer
,而当我将ScrollViewer推出时 我能够实现我想要的功能。
我不确定为什么ScrollViewer
会产生这种效果?
另外,我发现我可以保留ScrollViewer
,只需在.Measure()
上调用WrapPanel
即可更新布局。
这两种方案都没有100%对我有意义,但它们似乎都有效。