none
Событие отслеживания видимости контрола RRS feed

  • Вопрос

  • Скажите  пожалуйста, есть ли событие, которое бы оповещало программу об изменении физической видимости контрола на экране для пользователя? Т.е. если контрол был скрыт скроллингом, или было скрыто полностью приложение, чтобы после оповещения о аидимости переставали или начинали обновляться данные? Другими словами, если контрол не виден, то остановить обновление данных, если контрол снова виден, то запустить обновление данных.
    4 апреля 2013 г. 13:18

Ответы

Все ответы

  • Если я правильно тебя понял, тогда такое событие нет. В зависимости поведения и события в твоем форме такую логику ты должен сам придумать, на основе стандартных и ползовательких событии. Предоставленные тебе стандартные событии хватает тебе решить эту задачу.
    5 апреля 2013 г. 7:32
  • Добрый день.

    Если вы разрабатываете на WinForms, можно привязаться к событию Paint этого компонента. Оно как раз вызывается каждый раз, как контрол попадает в зону видимости.

    5 апреля 2013 г. 8:57
    Отвечающий
  • Добрый день.

    Если вы разрабатываете на WinForms, можно привязаться к событию Paint этого компонента. Оно как раз вызывается каждый раз, как контрол попадает в зону видимости.

    Вот именно, что разработка идет на Silverlight. А там, ничего подходящего я не нашел.
    8 апреля 2013 г. 5:23
  • Привет,

    Может такой вариант подойдет:

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

    9 апреля 2013 г. 6:43
    Модератор
  • Привет,

    Может такой вариант подойдет:

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

    Нет, нужно именно проверка видимости, если например контрол скрыт скроллом или другим контролом, но явно видимость не изменялась на Collapsed
    9 апреля 2013 г. 13:31
  • Нет, нужно именно проверка видимости, если например контрол скрыт скроллом или другим контролом, но явно видимость не изменялась на Collapsed

    Понятно, мне кажется здесь найдете ответ на Ваш вопрос: Determining if object is visible and clickable


    10 апреля 2013 г. 6:32
    Модератор