Как получить уведомление «Контроль больше не виден» в Silverlight, когда любой родитель скрыт? - PullRequest
1 голос
/ 18 февраля 2010

Мне нужно получить какое-то уведомление, когда элемент управления больше не виден в поле зрения. То есть, если у меня есть контроль глубоко в дереве (например, Border -> Grid -> StackPanel -> TextBox), мне нужно уведомление о TextBox, когда Border становится скрытым. У меня нет доступа к самой границе, представьте себе, как будто обертывание контроля над всем рушится, мне все еще нужно уведомление о TextBox, который глубоко связан с дочерними элементами управления.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Мне не удалось найти какое-либо событие или свойство, которое указывало бы на то, является ли элемент управления видимым / невидимым, когда родитель невидим, поэтому мне пришлось подключиться к событию 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;
    }
0 голосов
/ 18 февраля 2010

UIElements не уведомляют своих детей об изменениях видимости.

Что вы делаете, что TextBox должен реагировать на видимость границы? Может быть, мы можем помочь с решением, которое не требует знаний родителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...