C# 设置父容器的可见性

C# 设置父容器的可见性,c#,wpf,C#,Wpf,我想通过检查父容器包含的每个控件的可见性来设置其可见性。如果它包含的控件都不可见,则父容器将隐藏。我知道如何通过硬编码容器包含的每个控件来实现这一点。但是,我希望执行此检查,而不必键入容器包含在代码隐藏中的每个控件的名称。在代码隐藏中是否有这样做的方法?我不是在寻找多数据触发器。只需迭代子控件并设置可见性 Winform版本 var isParentVisible = false; foreach(Control child in ParentContainer.Controls) {

我想通过检查父容器包含的每个控件的可见性来设置其可见性。如果它包含的控件都不可见,则父容器将隐藏。我知道如何通过硬编码容器包含的每个控件来实现这一点。但是,我希望执行此检查,而不必键入容器包含在代码隐藏中的每个控件的名称。在代码隐藏中是否有这样做的方法?我不是在寻找多数据触发器。

只需迭代子控件并设置可见性

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;
} 

只需迭代子控件并设置可见性

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
属性并对结果进行逻辑处理,我希望你必须使用该属性走很长的路。如果愿意,您可以遍历依赖关系树。这是一个起点:。你可以把它改成另一个方向,让所有的子元素都有一个聚合的可见性。如果我没记错的话,那只能得到第一级的子元素。如果这对你有用,那太好了!但如果不是,您可能也必须使用一些递归来迭代所有子对象的子对象。如果你正在寻找一个例子,我写的这篇文章可能会帮助你朝着正确的方向开始。它用于查找特定类型的父对象或子对象,而不是检查可见性,但是概念是一样的。你说得对!但是我不认为这个问题有任何关于亚儿童的话题,如果我没记错的话,那只会涉及到一级儿童。如果这对你有用,那太好了!但如果不是,您可能也必须使用一些递归来迭代所有子对象的子对象。如果你正在寻找一个例子,我写的这篇文章可能会帮助你朝着正确的方向开始。它用于查找特定类型的父对象或子对象,而不是检查可见性,但是概念是一样的。你说得对!但我不认为这个问题涉及到亚儿童