【问题标题】:Hide objects/User Controls within WrapPanel?在 WrapPanel 中隐藏对象/用户控件?
【发布时间】: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


【解决方案1】:

我想我找到了问题所在。我们最近将 WrapPanel 添加到了 ScrollViewer当我取出 ScrollViewer 时,我能够实现我想要的功能。

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

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

这两个选项对我来说都不是 100% 有意义,但它们似乎都有效。

【讨论】:

  • 虽然我怀疑 MS 会注意,但无论如何都要向 MS Connect 提交错误。
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 2011-10-05
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多