如何在隐藏任何父级时在Silverlight中获取“控制不再可见”通知?

时间:2010-02-18 15:40:45

标签: silverlight controls visibility

当视图中不再显示控件时,我需要收到某种通知。 也就是说,如果我在树中有深度控制(如Border - > Grid - > StackPanel - > TextBox),当Border被隐藏时,我需要在TextBox上进行通知。我无法访问Border本身,想象一下包装控件的所有内容都会崩溃,我仍然需要在TextBox上注意深入的子控件。

2 个答案:

答案 0 :(得分:3)

我没有设法找到任何事件或属性,如果父在不可见时控件是可见的/不可见的,那么我必须挂钩到LayoutUpdated事件并检查所有可视祖先的VisibilityProperty。

如果感兴趣,请点击这里:

    private bool IsControlVisible(FrameworkElement element)
    {
        var ancestors = element.GetVisualAncestorsAndSelf().ToList();

        foreach(var a in ancestors)
        {
            Visibility visibility = (Visibility)a.GetValue(FrameworkElement.VisibilityProperty);

            if (visibility == Visibility.Collapsed)
                return false;
        }

        return true;
    }

答案 1 :(得分:0)

UIElements不会通知他们的孩子可见性变化。

TextBox需要响应边框可见性,你在做什么?也许我们可以帮助解决不需要父母知识的解决方案。