【发布时间】:2015-11-30 09:29:19
【问题描述】:
我必须遍历 stackPanel 的所有子项。 作为 WPF 的新手,我会这样做
foreach (var item in spTab3.Children)
{
if (item.GetType() == typeof(ListBox))
((ListBox)item).Visibility = Visibility.Collapsed;
if (item.GetType() == typeof(Grid))
((Grid)item).Visibility = Visibility.Collapsed;
....
}
也就是说,我必须转换所有类型的元素才能设置可见性。我敢打赌,有一种更聪明的方法可以完成所有工作。 谢谢
---编辑--- 所以简而言之,我有一个带有孩子的 stackpanel spTab3。 当我按照 Bijington 的建议进行操作时:
spTab3.Visibility = Visibility.Collapsed;<----------set all children to collapsed
spTab3.Children[iVisibleTab-1].Visibility = Visibility.Visible;<----set only one to visible
第二行没有效果。 当我按照 Spawn 的说明进行操作时:
foreach (var item in spTab3.Children)
((UIElement)item).Visibility = Visibility.Collapsed;
spTab3.Children[iVisibleTab-1].Visibility = Visibility.Visible;
谁能解释一下为什么?!?
【问题讨论】:
-
为什么要将所有可见性设置为
Collapsed? -
因为首先我将它们全部设置为折叠,然后我将其设置为仅我感兴趣的可见。
-
Visibility 属性继承自 UIElement,因此您只需转换为 UIElement。
-
@Spawn 非常感谢!! foreach (spTab3.Children 中的 UIElement 项) item.Visibility = Visibility.Collapsed;作品。您可能想提出它作为解决方案,以便我可以投票给您
-
您是否必须遍历所有孩子并更改他们的可见性?你不能只改变 StackPanel 本身的可见性吗?
标签: c# wpf loops properties casting