C# 设置父容器的可见性
我想通过检查父容器包含的每个控件的可见性来设置其可见性。如果它包含的控件都不可见,则父容器将隐藏。我知道如何通过硬编码容器包含的每个控件来实现这一点。但是,我希望执行此检查,而不必键入容器包含在代码隐藏中的每个控件的名称。在代码隐藏中是否有这样做的方法?我不是在寻找多数据触发器。只需迭代子控件并设置可见性 Winform版本C# 设置父容器的可见性,c#,wpf,C#,Wpf,我想通过检查父容器包含的每个控件的可见性来设置其可见性。如果它包含的控件都不可见,则父容器将隐藏。我知道如何通过硬编码容器包含的每个控件来实现这一点。但是,我希望执行此检查,而不必键入容器包含在代码隐藏中的每个控件的名称。在代码隐藏中是否有这样做的方法?我不是在寻找多数据触发器。只需迭代子控件并设置可见性 Winform版本 var isParentVisible = false; foreach(Control child in ParentContainer.Controls) {
var isParentVisible = false;
foreach(Control child in ParentContainer.Controls)
{
isParentVisible = child.IsVisible;
if(isParentVisible)
break;
}
WPF版本
var isParentVisible = false;
foreach (var child in LogicalTreeHelper.GetChildren(ParentContainer))
{
if (!(child is UIElement)) {
continue;
}
isParentVisible = child.IsVisible;
if(isParentVisible)
break;
}
只需迭代子控件并设置可见性 Winform版本
var isParentVisible = false;
foreach(Control child in ParentContainer.Controls)
{
isParentVisible = child.IsVisible;
if(isParentVisible)
break;
}
WPF版本
var isParentVisible = false;
foreach (var child in LogicalTreeHelper.GetChildren(ParentContainer))
{
if (!(child is UIElement)) {
continue;
}
isParentVisible = child.IsVisible;
if(isParentVisible)
break;
}
如果您没有绑定到它们的
IsVisible
属性并对结果进行逻辑处理,那么我希望您必须使用该属性进行一段漫长的旅程。如果愿意,您可以遍历依赖关系树。这是一个起点:。你可以修改它,使其朝着另一个方向发展,以找到所有子项的聚合可见性。如果你不绑定到它们的IsVisible
属性并对结果进行逻辑处理,我希望你必须使用该属性走很长的路。如果愿意,您可以遍历依赖关系树。这是一个起点:。你可以把它改成另一个方向,让所有的子元素都有一个聚合的可见性。如果我没记错的话,那只能得到第一级的子元素。如果这对你有用,那太好了!但如果不是,您可能也必须使用一些递归来迭代所有子对象的子对象。如果你正在寻找一个例子,我写的这篇文章可能会帮助你朝着正确的方向开始。它用于查找特定类型的父对象或子对象,而不是检查可见性,但是概念是一样的。你说得对!但是我不认为这个问题有任何关于亚儿童的话题,如果我没记错的话,那只会涉及到一级儿童。如果这对你有用,那太好了!但如果不是,您可能也必须使用一些递归来迭代所有子对象的子对象。如果你正在寻找一个例子,我写的这篇文章可能会帮助你朝着正确的方向开始。它用于查找特定类型的父对象或子对象,而不是检查可见性,但是概念是一样的。你说得对!但我不认为这个问题涉及到亚儿童