Как исправить проблему с выпадающим списком ComboBox в полноэкранном режиме? - PullRequest
2 голосов
/ 11 марта 2010

Короткая версия: раскрывающийся список ComboBox работает и корректно отображается перед полноэкранным режимом, но не во время или после.

Я не совсем уверен, как спросить это, поэтому я на самом деле сделал страницу, демонстрирующую ошибку , с очень простым приложением Flex и всеми тремя направлениями, которые вам нужны, чтобы самостоятельно решить проблему .

Для тех из вас, кто не решился перейти по моей ссылке выше, я постараюсь объяснить здесь. Я создал довольно обширное приложение Flex (не то, что в ссылке), в котором есть несколько графиков, диаграмм, флажков и других элементов управления для этих диаграмм. В нижней части приложения в нескольких состояниях приложения находится ComboBox (например, тег <select> в HTML). Поскольку это в самом низу, когда вы щелкаете по нему, чтобы получить доступ к раскрывающемуся меню, Flex задумчиво поднимает его.

Хорошо работает до полноэкранного режима. При входе в полноэкранный режим я масштабирую все с stage.scaleMode = StageScaleMode.SHOW_ALL. Теперь, когда вы нажимаете на ComboBox, выпадающий список удивительно велик и фактически падает ниже ComboBox, в результате чего он в основном исчезает за пределами экрана. Самое приятное то, что после выхода из полноэкранного режима раскрывающийся список настаивает на том, чтобы продолжать опускаться ниже ComboBox, который расположен в нижней части приложения и поэтому продолжает обрезаться. Кто-нибудь еще сталкивался с этим зверем, смотрел в его великую пасть и выходил победителем?

Вы можете получить код из View Source по ссылке, и большое спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 15 января 2011

У меня есть обходной путь для незначительной части проблемы, а также некоторые подробности того, почему происходит другая часть проблемы. Может быть, кто-то еще может выяснить остальное.

Сначала общее примечание

Flex 3.5 ComboBox использует следующее логическое выражение (строки 1572-73), чтобы определить, следует ли превратить его выпадающий список в выпадающий список up :

point.y + _dropdown.height > screen.bottom && 
point.y > screen.top + _dropdown.height

где point.y - это глобальная координата для нижней части ComboBox. По сути, «если он достигнет дна и не достигнет вершины, тогда ...». В противном случае, если он также достигнет вершины, то по умолчанию он снова отбрасывает вещь пол, как мы видим в случае под рукой. Имея это в виду ...

Частичное обходное решение

Я смог восстановить приложение до его нормальной функциональности после выхода из полноэкранного режима, добавив следующий код в обработчик кнопки toggleFullscreen() при выходе из полноэкранного режима:

    ...
    screen.height = height;
    screen.width = width;

    myComboBox.dropdown.invalidateSize(); // myComboBox being the id for the ComboBox
}

Объяснение : Единственное, что происходило (возможно, из-за чего-то другого), было то, что значения свойства screen в systemManager не сбрасывались должным образом. Таким образом, когда этот логический оператор сверху был оценен, он все еще использовал полноэкранные значения и, следовательно, продолжал отбрасывать список через пол. Этот код просто сбрасывает экран вручную и пересчитывает размер выпадающего списка.

Это не так много, но, по крайней мере, это что-то. В противном случае ...

Некоторые сведения о проблеме с полноэкранным режимом

Я заметил две проблемы, происходящие здесь:

  1. Когда это булево выражение сверху вычисляется в полноэкранном режиме, некоторые значения масштабируются, а некоторые нет. А именно, point.y и _dropdown.height не масштабируются, тогда как screen.bottom масштабируется (относительно). Итак, первая часть выражения всегда получается ложной, и, таким образом, ComboBox продолжает выводить список вниз, даже если на самом деле места нет. Я понятия не имею, почему это происходит, но это так. Я пытался бесполезно манипулировать этими значениями косвенно без негативных последствий, но у меня также было ощущение, что даже если бы я получил выражение для правильной оценки, это не решило бы другую проблему ...
  2. Тот факт, что когда рендерится выпадающий список down , это выглядит так, как будто он был дважды масштабирован. То есть вместо масштабирования 3,5, которое было у ComboBox на моем мониторе, выпадающий список выглядел так, как будто он имеет масштабирование 3,5 * 3,5. Я не слишком много играл с этим, но скажу, что когда я вручную применил матрицу преобразования для отмены масштабирования ComboBox, размер, при котором выпадающий список отображался, соответствовал оригиналу (в полноэкранном режиме). ) Поле со списком. Может быть, кто-то еще может возиться с этим.

Это насколько я понял. Я не совсем уверен, что решение, играющее с преобразованиями, никуда не денется, но если написание вашего собственного пользовательского dropDownFactory решит проблему, я по крайней мере скажу, что уверен, что это будет менее утомительно .

Удачи.

0 голосов
/ 18 мая 2010

У меня были некоторые проблемы с выпадающим списком CB, вроде как не связанным, но я должен был применить изменения непосредственно к выпадающему, например myCombo.drowpdown.[insert whatever property], потому что он не применял изменения, внесенные в выпадающий список. Может быть, вы можете попробовать это в своем приложении и посмотреть, поможет ли это.

...