ScrollContainer
Прокручиваемая область Control с управляемым содержимым и полосами прокрутки.
ScrollContainer ограничивает видимую область содержимого и смещает его по горизонтали/вертикали. Для списка добавьте одну колонку VBoxContainer и поместите элементы в неё; несколько прямых детей не образуют список автоматически. Контейнер включает ClipContents. Размер видимой области задаёт родительская раскладка, минимум содержимого определяет диапазон.
ScrollHorizontal/ScrollVertical — целые логические смещения. Их setter меняет значение полосы и отменяет активный drag; прямоугольники содержимого обновляются проходом раскладки. При стандартных настройках Range верхний предел равен MaxValue − Page, а не MaxValue. Получить границы и ValueChanged можно у GetHScrollBar/GetVScrollBar. Это внутренние дочерние объекты: не освобождайте их отдельно; их MaxValue/Page пересчитываются контейнером. Если значение полосы дробное, целый getter ScrollContainer отбрасывает дробную часть.
Режимы оси различаются: Disabled отключает её прокрутку и включает соответствующий минимум содержимого в минимум контейнера; Auto показывает полосу при необходимости; ShowAlways показывает постоянно; ShowNever скрывает полосу, сохраняя прокрутку; Reserve резервирует место даже без видимой полосы. MaximizeFirst сначала учитывает желаемый размер содержимого до конечного максимума контейнера; без подходящего максимума область может вырасти вместо ожидаемой прокрутки. Не заменяйте Disabled на ShowNever в расчёте получить одинаковые ограничения.
EnsureControlVisible принимает потомка и рассчитывает необходимое смещение по его актуальному прямоугольнику. После добавления/изменения детей дождитесь раскладки, например отложенным вызовом после создания списка. Метод не устанавливает фокус и не обещает целиком вместить элемент, который больше видимой области. FollowFocus вызывает такой переход при смене фокуса на потомка; одно включение флага не прокручивает к уже выбранному элементу автоматически.
ScrollStarted/ScrollEnded относятся к drag после преодоления ScrollDeadzone, включая его отмену; это не универсальные события каждого изменения. Для наблюдения за значением подключайтесь к ValueChanged полос. ScrollHorizontalByDefault задаёт предпочтение оси колеса, Shift меняет выбор. CustomStep задаёт шаг внутренней полосы; отрицательное значение использует её обычный Step. Колесо контейнера и жесты имеют другую логику и не обязаны двигаться на CustomStep.
ScrollHintMode/TileScrollHint управляют декоративными подсказками с ресурсами темы. DrawFocusBorder управляет рамкой уже существующего фокуса и сам не выбирает элемент. Проверяйте оформление и реальные устройства отдельно.
Пример списка и перехода к пункту.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
ScrollContainerКонструктор
public ScrollContainer();Создаёт область с Auto по обеим осям, ClipContents = true и FollowFocus = false. Поместите список в один дочерний Container и задайте доступный размер родительской раскладкой.
Свойства12
DrawFocusBorderСвойство
public bool DrawFocusBorder { get; set; }Рисует рамку при подходящем собственном/дочернем фокусе; по умолчанию false. Не вызывает GrabFocus и не включает клавиатурный маршрут сам. Настройка может менять внутренние отступы оформления.
FollowFocusСвойство
public bool FollowFocus { get; set; }Автоматический переход при смене фокуса на потомка, по умолчанию false. Не задаёт порядок Tab/стрелок. Включение не вызывает немедленный переход к уже сфокусированному элементу.
HorizontalScrollModeСвойство
public ScrollContainer.ScrollMode HorizontalScrollMode { get; set; }Режим горизонтальной оси, Auto по умолчанию. Disabled влияет на минимум содержимого, ShowNever только скрывает полосу. Смена режима запрашивает раскладку; не меняет ориентацию дочернего списка.
ScrollDeadzoneСвойство
public int ScrollDeadzone { get; set; }Порог накопленного touch-drag движения в логических пикселях до начала прокрутки. Начальное значение берётся из gui/common/default_scroll_deadzone. Это не минимальное смещение setter и не шаг колеса.
ScrollHintModeСвойство
public ScrollContainer.ScrollHintModeEnum ScrollHintMode { get; set; }Какие края показывают декоративные подсказки прокрутки; по умолчанию Disabled. Нужны подходящие текстуры/цвета темы. Не включает/отключает саму прокрутку.
ScrollHorizontalСвойство
public int ScrollHorizontal { get; set; }Целое горизонтальное смещение в логических пикселях. Стандартный диапазон ограничен MaxValue − Page полосы. Setter отменяет drag; содержимое перемещается проходом раскладки. Дробный Value полосы getter усечёт.
ScrollHorizontalByDefaultСвойство
public bool ScrollHorizontalByDefault { get; set; }Предпочтение горизонтальной оси для колеса, по умолчанию false; Shift меняет выбор. Не заменяет HorizontalScrollMode и не переориентирует содержимое.
ScrollHorizontalCustomStepСвойство
public float ScrollHorizontalCustomStep { get; set; }Шаг внутренней горизонтальной полосы. Отрицательное значение, по умолчанию -1, использует обычный Step; неотрицательное задаёт custom step. Не универсальная скорость колеса, pan или touch-drag.
ScrollVerticalСвойство
public int ScrollVertical { get; set; }Целое вертикальное смещение; стандартный максимум равен MaxValue − Page полосы. Не высота содержимого и не номер элемента. Setter отменяет drag, а немедленный прямоугольник потомка может ещё быть прежним.
ScrollVerticalCustomStepСвойство
public float ScrollVerticalCustomStep { get; set; }Шаг внутренней вертикальной полосы; -1 по умолчанию использует её Step. 0 задаёт нулевой custom step, а не выключает все способы прокрутки. Колесо контейнера использует собственную логику.
TileScrollHintСвойство
public bool TileScrollHint { get; set; }Повторение текстуры подсказки вместо растяжения, false по умолчанию. Влияет на рисунок hint, не на шаг или диапазон прокрутки.
VerticalScrollModeСвойство
public ScrollContainer.ScrollMode VerticalScrollMode { get; set; }Режим вертикальной оси, Auto по умолчанию. ShowNever сохраняет прокрутку без полосы; Reserve сохраняет её место. Disabled/MaximizeFirst могут заставить контейнер учитывать высоту содержимого в минимуме.
Методы27
EnsureControlVisiblevoid
public void EnsureControlVisible(Control control);Прокручивает к потомку по его актуальному прямоугольнику. Вызывайте после раскладки; сразу после AddChild размеры могут быть прежними. Не задаёт фокус и не увеличивает видимую область для слишком большого элемента.
| Имя | Тип | По умолчанию |
|---|---|---|
control | Control | — |
controlЖивой Control-потомок этого ScrollContainer с актуальными размерами; не сам контейнер и не чужой элемент.
GetDeadzoneint
public int GetDeadzone();Порог накопленного touch-drag движения в логических пикселях до начала прокрутки. Начальное значение берётся из gui/common/default_scroll_deadzone. Это не минимальное смещение setter и не шаг колеса.
intТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
GetDrawFocusBorderbool
public bool GetDrawFocusBorder();Рисует рамку при подходящем собственном/дочернем фокусе; по умолчанию false. Не вызывает GrabFocus и не включает клавиатурный маршрут сам. Настройка может менять внутренние отступы оформления.
boolТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
GetHScrollint
public int GetHScroll();Целое горизонтальное смещение в логических пикселях. Стандартный диапазон ограничен MaxValue − Page полосы. Setter отменяет drag; содержимое перемещается проходом раскладки. Дробный Value полосы getter усечёт.
intТекущее целое смещение; дробная часть Value отбрасывается.
GetHScrollBarHScrollBar
public HScrollBar GetHScrollBar();Возвращает внутренний HScrollBar, принадлежащий ScrollContainer. Через него доступны ValueChanged и границы Range. Не освобождайте отдельно; MaxValue/Page будут пересчитаны контейнером.
HScrollBarОбщая ссылка на внутреннюю дочернюю полосу, не объект для отдельного Free/Dispose.
GetHorizontalCustomStepfloat
public float GetHorizontalCustomStep();Шаг внутренней горизонтальной полосы. Отрицательное значение, по умолчанию -1, использует обычный Step; неотрицательное задаёт custom step. Не универсальная скорость колеса, pan или touch-drag.
floatТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
GetHorizontalScrollModeScrollContainer.ScrollMode
public ScrollContainer.ScrollMode GetHorizontalScrollMode();Режим горизонтальной оси, Auto по умолчанию. Disabled влияет на минимум содержимого, ShowNever только скрывает полосу. Смена режима запрашивает раскладку; не меняет ориентацию дочернего списка.
ScrollContainer.ScrollModeТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
GetScrollHintModeScrollContainer.ScrollHintModeEnum
public ScrollContainer.ScrollHintModeEnum GetScrollHintMode();Какие края показывают декоративные подсказки прокрутки; по умолчанию Disabled. Нужны подходящие текстуры/цвета темы. Не включает/отключает саму прокрутку.
ScrollContainer.ScrollHintModeEnumТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
GetVScrollint
public int GetVScroll();Целое вертикальное смещение; стандартный максимум равен MaxValue − Page полосы. Не высота содержимого и не номер элемента. Setter отменяет drag, а немедленный прямоугольник потомка может ещё быть прежним.
intТекущее целое смещение; дробная часть Value отбрасывается.
GetVScrollBarVScrollBar
public VScrollBar GetVScrollBar();Возвращает внутренний VScrollBar, не новый независимый ресурс. ValueChanged полезен для наблюдения за смещением любого источника. Храните ссылку только пока жив родитель.
VScrollBarОбщая ссылка на внутреннюю дочернюю полосу, не объект для отдельного Free/Dispose.
GetVerticalCustomStepfloat
public float GetVerticalCustomStep();Шаг внутренней вертикальной полосы; -1 по умолчанию использует её Step. 0 задаёт нулевой custom step, а не выключает все способы прокрутки. Колесо контейнера использует собственную логику.
floatТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
GetVerticalScrollModeScrollContainer.ScrollMode
public ScrollContainer.ScrollMode GetVerticalScrollMode();Режим вертикальной оси, Auto по умолчанию. ShowNever сохраняет прокрутку без полосы; Reserve сохраняет её место. Disabled/MaximizeFirst могут заставить контейнер учитывать высоту содержимого в минимуме.
ScrollContainer.ScrollModeТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
IsFollowingFocusbool
public bool IsFollowingFocus();Автоматический переход при смене фокуса на потомка, по умолчанию false. Не задаёт порядок Tab/стрелок. Включение не вызывает немедленный переход к уже сфокусированному элементу.
boolТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
IsScrollHintTiledbool
public bool IsScrollHintTiled();Повторение текстуры подсказки вместо растяжения, false по умолчанию. Влияет на рисунок hint, не на шаг или диапазон прокрутки.
boolТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
IsScrollHorizontalByDefaultbool
public bool IsScrollHorizontalByDefault();Предпочтение горизонтальной оси для колеса, по умолчанию false; Shift меняет выбор. Не заменяет HorizontalScrollMode и не переориентирует содержимое.
boolТекущее сохранённое значение настройки. Не проверка рисунка или физического устройства ввода.
SetDeadzonevoid
public void SetDeadzone(int deadzone);Порог накопленного touch-drag движения в логических пикселях до начала прокрутки. Начальное значение берётся из gui/common/default_scroll_deadzone. Это не минимальное смещение setter и не шаг колеса.
| Имя | Тип | По умолчанию |
|---|---|---|
deadzone | int | — |
deadzoneНеотрицательный порог drag в логических пикселях. Setter хранит переданное число без собственной проверки диапазона.
SetDrawFocusBordervoid
public void SetDrawFocusBorder(bool draw);Рисует рамку при подходящем собственном/дочернем фокусе; по умолчанию false. Не вызывает GrabFocus и не включает клавиатурный маршрут сам. Настройка может менять внутренние отступы оформления.
| Имя | Тип | По умолчанию |
|---|---|---|
draw | bool | — |
drawtrue разрешает рамку подходящего фокуса; не вызывает GrabFocus.
SetFollowFocusvoid
public void SetFollowFocus(bool enabled);Автоматический переход при смене фокуса на потомка, по умолчанию false. Не задаёт порядок Tab/стрелок. Включение не вызывает немедленный переход к уже сфокусированному элементу.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledtrue реагирует на следующие смены фокуса потомков; false выключает автоматический переход.
SetHScrollvoid
public void SetHScroll(int value);Целое горизонтальное смещение в логических пикселях. Стандартный диапазон ограничен MaxValue − Page полосы. Setter отменяет drag; содержимое перемещается проходом раскладки. Дробный Value полосы getter усечёт.
| Имя | Тип | По умолчанию |
|---|---|---|
value | int | — |
valueЦелое логическое смещение; штатный Range ограничивает его своими MinValue и MaxValue − Page.
SetHorizontalCustomStepvoid
public void SetHorizontalCustomStep(float value);Шаг внутренней горизонтальной полосы. Отрицательное значение, по умолчанию -1, использует обычный Step; неотрицательное задаёт custom step. Не универсальная скорость колеса, pan или touch-drag.
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
valueКонечный шаг полосы: отрицательный использует обычный Step, неотрицательный — custom step.
SetHorizontalScrollModevoid
public void SetHorizontalScrollMode(ScrollContainer.ScrollMode enable);Режим горизонтальной оси, Auto по умолчанию. Disabled влияет на минимум содержимого, ShowNever только скрывает полосу. Смена режима запрашивает раскладку; не меняет ориентацию дочернего списка.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | ScrollContainer.ScrollMode | — |
enableЗначение enum ScrollMode, несмотря на имя enable; это не bool.
SetScrollHintModevoid
public void SetScrollHintMode(ScrollContainer.ScrollHintModeEnum scrollHintMode);Какие края показывают декоративные подсказки прокрутки; по умолчанию Disabled. Нужны подходящие текстуры/цвета темы. Не включает/отключает саму прокрутку.
| Имя | Тип | По умолчанию |
|---|---|---|
scrollHintMode | ScrollContainer.ScrollHintModeEnum | — |
scrollHintModeScrollHintModeEnum выбранных краёв либо Disabled без подсказок.
SetScrollHorizontalByDefaultvoid
public void SetScrollHorizontalByDefault(bool enable);Предпочтение горизонтальной оси для колеса, по умолчанию false; Shift меняет выбор. Не заменяет HorizontalScrollMode и не переориентирует содержимое.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
enabletrue предпочитает горизонтальное колесо, false — обычный выбор вертикальной оси.
SetTileScrollHintvoid
public void SetTileScrollHint(bool tileScrollHint);Повторение текстуры подсказки вместо растяжения, false по умолчанию. Влияет на рисунок hint, не на шаг или диапазон прокрутки.
| Имя | Тип | По умолчанию |
|---|---|---|
tileScrollHint | bool | — |
tileScrollHinttrue повторяет текстуры hint, false растягивает их.
SetVScrollvoid
public void SetVScroll(int value);Целое вертикальное смещение; стандартный максимум равен MaxValue − Page полосы. Не высота содержимого и не номер элемента. Setter отменяет drag, а немедленный прямоугольник потомка может ещё быть прежним.
| Имя | Тип | По умолчанию |
|---|---|---|
value | int | — |
valueЦелое логическое смещение; штатный Range ограничивает его своими MinValue и MaxValue − Page.
SetVerticalCustomStepvoid
public void SetVerticalCustomStep(float value);Шаг внутренней вертикальной полосы; -1 по умолчанию использует её Step. 0 задаёт нулевой custom step, а не выключает все способы прокрутки. Колесо контейнера использует собственную логику.
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
valueКонечный шаг полосы: отрицательный использует обычный Step, неотрицательный — custom step.
SetVerticalScrollModevoid
public void SetVerticalScrollMode(ScrollContainer.ScrollMode enable);Режим вертикальной оси, Auto по умолчанию. ShowNever сохраняет прокрутку без полосы; Reserve сохраняет её место. Disabled/MaximizeFirst могут заставить контейнер учитывать высоту содержимого в минимуме.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | ScrollContainer.ScrollMode | — |
enableЗначение enum ScrollMode, несмотря на имя enable; это не bool.
Сигналы и события2
ScrollEndedСобытие
public event Action ScrollEnded;Сигнал завершения/отмены drag, который преодолел deadzone. Setter смещения может отменить активный drag. Это не сигнал окончания любого программного перехода.
ScrollStartedСобытие
public event Action ScrollStarted;Сигнал начала drag-прокрутки после преодоления deadzone. Не гарантируется для колеса или SetVScroll/SetHScroll; для изменения значения используйте ValueChanged полосы.
ScrollContainer.ScrollHintModeEnum
| Значение | Описание |
|---|---|
All = 1 | Подсказки при прокрутке будут отображаться вверху и внизу (при вертикальной прокрутке) или слева и справа (при горизонтальной прокрутке). |
Bottom = 7 | Свиток будет показан внизу. |
BottomAndRight = 3 | Подсказки при прокрутке будут отображаться внизу (если горизонтальная прокрутка) или справа (если горизонтальная прокрутка). |
Disabled = 0 | Подсказки при прокрутке никогда не будут отображаться. |
Left = 8 | Слева будет показан намек на свиток. |
LeftAndRight = 5 | Свитки будут показаны слева и справа. |
Right = 9 | Справа будет показан намек на свиток. |
Top = 6 | Наверху будет показан намек на свиток. |
TopAndBottom = 4 | Подсказки при прокрутке будут отображаться вверху и внизу. |
TopAndLeft = 2 | Подсказки при прокрутке будут отображаться вверху (если прокрутка вертикальная) или слева (если прокрутка горизонтальная). |
ScrollContainer.ScrollMode
| Значение | Описание |
|---|---|
Auto = 1 | Прокрутка включена, полоса прокрутки будет видна только при необходимости, т. е. если содержимое контейнера больше самого контейнера. |
Disabled = 0 | Прокрутка отключена, полоса прокрутки будет невидима. |
MaximizeFirst = 5 | Ведёт себя как |
Reserve = 4 | Объединяет |
ShowAlways = 2 | Прокрутка включена, полоса прокрутки всегда будет видна. |
ShowNever = 3 | Прокрутка включена, полоса прокрутки будет скрыта. |
Свойства темы
Это ключи ресурсов Theme, а не свойства C# класса. Используйте методы GetTheme…() и AddTheme…Override() у Control с соответствующим типом значения.
| Ключ и тип | Описание |
|---|---|
scroll_hint_horizontal_colorColor |
Color(0, 0, 0, 1) |
scroll_hint_vertical_colorColor |
Color(0, 0, 0, 1) |
scrollbar_h_separationint | Расстояние между вертикальной полосой прокрутки ScrollContainer и его содержимым, в пикселях. Если минимальный размер содержимого превышает размер ScrollContainer, расстояние не добавляется. По умолчанию:0 |
scrollbar_margin_bottomint | Нижний предел горизонтального свитка. [:: нижняя окраина темы [тематическая дискуссия] По умолчанию:-1 |
scrollbar_margin_leftint | В случае отрицательного, используется левая полоса горизонтального свитка. [b) левая сторона темы [тематическая дискуссия]. По умолчанию:-1 |
scrollbar_margin_rightint | Правый край горизонтального свитка. [тема [на дискуссионном форуме] - правильная разница. По умолчанию:-1 |
scrollbar_margin_topint | Верхняя полоса горизонтального свитка. [:: верхняя окраина темы [тематическая дискуссия] По умолчанию:-1 |
scrollbar_v_separationint | Расстояние между горизонтальной полосой прокрутки ScrollContainer и его содержимым, в пикселях. Если минимальный размер содержимого превышает размер ScrollContainer, расстояние не добавляется. По умолчанию:0 |
scroll_hint_horizontalTexture2D | Индикатор, который будет отображаться, когда контент еще можно прокручивать по горизонтали. См. |
scroll_hint_verticalTexture2D | Индикатор, который будет отображаться, когда контент еще можно прокручивать вертикально. См. Сосредоточься |
focusStyleBox | Граница фокуса |
panelStyleBox | Фон |