SplitContainer
Панели с изменяемыми пользователем границами.
Размещает подходящие прямые дочерние Control последовательно и создаёт разделители между ними. Поддерживает больше двух панелей. Базовый SplitContainer горизонтален и позволяет сменить Vertical; HSplitContainer и VSplitContainer фиксируют ось. Скрытые Control, TopLevel и обычные Entity-посредники не являются обычными панелями раскладки.
SplitOffsets содержит смещения границ в пикселях относительно исходного распределения, рассчитанного по размерам контейнера, SizeFlags, stretch ratio и ограничениям детей. Это не абсолютные координаты и не процент. Для трёх равномерно растягиваемых панелей в области шириной 300 без промежутков нулевые смещения дают ширины 100/100/100; [20, -10] дают 120/70/110. Пример предполагает LTR и DraggerVisibility = HiddenCollapsed.
Массив int[] копируется при передаче и получении: измените копию и присвойте её обратно. Сохраняйте весь SplitOffsets для нескольких панелей. Устаревшие SplitOffset, GetSplitOffset и SetSplitOffset работают только с первой границей. После добавления панелей или resize дождитесь раскладки, прежде чем считывать итоговую геометрию.
Раскладка ограничивает видимые позиции по допустимым размерам, но сохранённые смещения могут оставаться за пределами диапазона. После завершённой раскладки вызовите ClampSplitOffset(priorityIndex), чтобы нормализовать смещения; индекс начинается с нуля и задаёт приоритет границы при согласовании остальных. При resize исходное распределение меняется, поэтому прежнее смещение не гарантирует прежнюю абсолютную ширину панели.
Collapsed временно игнорирует смещения и скрывает области перетаскивания, сохраняя видимость содержимого. Это не сворачивание панели до нуля. Hidden скрывает значок захвата; HiddenCollapsed дополнительно убирает промежуток. Для запрета пользовательского изменения задайте DraggingEnabled = false: программное изменение SplitOffsets продолжает работать.
DragStarted/Dragged/DragEnded описывают пользовательское перетаскивание; обычное присваивание смещений их не вызывает. Dragged передаёт смещение активной границы без её индекса: для сохранения всей раскладки читайте SplitOffsets. GetDragAreaControls возвращает внутренние Control, которыми владеет контейнер: не освобождайте и не переносите их.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
SplitContainerКонструктор
public SplitContainer();Создаёт горизонтальный контейнер: Collapsed = false, DraggingEnabled = true, SplitOffsets изначально [0]. Число рабочих разделителей зависит от подходящих детей после раскладки.
Свойства12
CollapsedСвойство
public bool Collapsed { get; set; }false по умолчанию. true временно игнорирует смещения и скрывает области захвата; содержимое панелей остаётся видимым. Сохранённые смещения восстанавливают действие после false, если не нормализовать их во время Collapsed.
DragAreaHighlightInEditorСвойство
public bool DragAreaHighlightInEditor { get; set; }Показывает отладочную область захвата только в редакторе, false по умолчанию. Не включает подсветку в запущенной игре и не меняет размеры панелей.
DragAreaMarginBeginСвойство
public int DragAreaMarginBegin { get; set; }Отступ области захвата от начального края вдоль разделителя, в пикселях; 0 по умолчанию. В горизонтальном SplitContainer это верхний край, в вертикальном — начальный горизонтальный край с учётом RTL. Не задаёт минимум размера панели.
DragAreaMarginEndСвойство
public int DragAreaMarginEnd { get; set; }Отступ области захвата от конечного края вдоль разделителя, в пикселях; 0 по умолчанию. Сокращает длину области взаимодействия, не меняет SplitOffsets.
DragAreaOffsetСвойство
public int DragAreaOffset { get; set; }Сдвиг области захвата поперёк разделителя в пикселях, 0 по умолчанию. Не сдвигает границу панелей; направление горизонтального сдвига учитывает RTL.
DragNestedIntersectionsСвойство
public bool DragNestedIntersections { get; set; }Разрешает совместное перетаскивание пересечений вложенных разделителей, false по умолчанию. Требуются включённые, видимые, развёрнутые SplitContainer с перпендикулярными осями и как минимум двумя панелями. Это не связывает произвольные соседние панели.
DraggerVisibilityСвойство
public SplitContainer.DraggerVisibilityEnum DraggerVisibility { get; set; }Visible по умолчанию. Hidden скрывает значок захвата, сохраняя промежуток; HiddenCollapsed также убирает промежуток. Эти режимы не заменяют DraggingEnabled = false и не скрывают панели.
DraggingEnabledСвойство
public bool DraggingEnabled { get; set; }Разрешает пользовательское изменение границ, true по умолчанию. false останавливает текущее перетаскивание и отключает обработку мыши областью захвата, но не запрещает программно менять SplitOffsets.
SplitOffsetСвойство · Устарело
public int SplitOffset { get; set; }Устаревший доступ только к смещению первой границы. Для нескольких панелей используйте SplitOffsets; это не абсолютная ширина первой панели.
SplitOffsetsСвойство
public int[] SplitOffsets { get; set; }Смещения границ в пикселях относительно исходного распределения. Для N панелей нужны N − 1 смещений; установите после формирования детей или дождитесь раскладки. int[] копируется при чтении и записи. Видимое ограничение позиции не нормализует сохранённые значения; для этого служит ClampSplitOffset.
TouchDraggerEnabledСвойство
public bool TouchDraggerEnabled { get; set; }Включает отдельные сенсорные элементы захвата, false по умолчанию. Не обходит Collapsed/DraggingEnabled. Включение также меняет расчёт промежутка: используется theme separation вместо максимума с размером обычного значка.
VerticalСвойство
public bool Vertical { get; set; }false — горизонтальные панели, true — вертикальные. Можно менять только у базового SplitContainer. HSplitContainer/VSplitContainer отклоняют любой вызов setter.
Методы29
ClampSplitOffset2 перегрузки
public void ClampSplitOffset();Нормализует сохранённые смещения по ограничениям детей с приоритетом указанной границы, затем ставит раскладку в очередь. Вызывайте после первоначальной раскладки. Без аргумента приоритет 0. Индекс должен существовать; при менее чем двух панелях нормализация не выполняется.
public void ClampSplitOffset(int priorityIndex = 0);Нормализует сохранённые смещения по ограничениям детей с приоритетом указанной границы, затем ставит раскладку в очередь. Вызывайте после первоначальной раскладки. Без аргумента приоритет 0. Индекс должен существовать; при менее чем двух панелях нормализация не выполняется.
| Имя | Тип | По умолчанию |
|---|---|---|
priorityIndex | int | 0 |
priorityIndexСуществующий индекс границы с нуля; 0 по умолчанию. Выбранная граница имеет приоритет при согласовании ограничений.
GetDragAreaControlControl · Устарело
public Control GetDragAreaControl();Устаревший доступ только к первой внутренней области захвата. Используйте GetDragAreaControls; возвращённый Control принадлежит контейнеру и может быть скрыт.
ControlОбщий Control первой области захвата, которым владеет контейнер.
GetDragAreaControlsReckfell.Collections.Array<Control>
public Reckfell.Collections.Array<Control> GetDragAreaControls();Возвращает массив внутренних Control областей захвата. Это общие ссылки на детей контейнера: не вызывайте Free/Dispose и не переносите их. Массив может содержать скрытый служебный элемент даже при менее чем двух панелях; его Count не равен числу активных границ.
Reckfell.Collections.Array<Control>Новый массив общих ссылок на внутренние Control; сами Control принадлежат контейнеру.
GetDragAreaMarginBeginint
public int GetDragAreaMarginBegin();Отступ области захвата от начального края вдоль разделителя, в пикселях; 0 по умолчанию. В горизонтальном SplitContainer это верхний край, в вертикальном — начальный горизонтальный край с учётом RTL. Не задаёт минимум размера панели.
intТекущее сохранённое значение настройки.
GetDragAreaMarginEndint
public int GetDragAreaMarginEnd();Отступ области захвата от конечного края вдоль разделителя, в пикселях; 0 по умолчанию. Сокращает длину области взаимодействия, не меняет SplitOffsets.
intТекущее сохранённое значение настройки.
GetDragAreaOffsetint
public int GetDragAreaOffset();Сдвиг области захвата поперёк разделителя в пикселях, 0 по умолчанию. Не сдвигает границу панелей; направление горизонтального сдвига учитывает RTL.
intТекущее сохранённое значение настройки.
GetDraggerVisibilitySplitContainer.DraggerVisibilityEnum
public SplitContainer.DraggerVisibilityEnum GetDraggerVisibility();Visible по умолчанию. Hidden скрывает значок захвата, сохраняя промежуток; HiddenCollapsed также убирает промежуток. Эти режимы не заменяют DraggingEnabled = false и не скрывают панели.
SplitContainer.DraggerVisibilityEnumТекущее сохранённое значение настройки.
GetSplitOffsetint
public int GetSplitOffset();Устаревший доступ только к смещению первой границы. Для нескольких панелей используйте SplitOffsets; это не абсолютная ширина первой панели.
intСохранённое смещение только первой границы, не гарантированная видимая координата.
GetSplitOffsetsint[]
public int[] GetSplitOffsets();Смещения границ в пикселях относительно исходного распределения. Для N панелей нужны N − 1 смещений; установите после формирования детей или дождитесь раскладки. int[] копируется при чтении и записи. Видимое ограничение позиции не нормализует сохранённые значения; для этого служит ClampSplitOffset.
int[]Копия массива смещений. Измените и присвойте обратно для применения.
IsCollapsedbool
public bool IsCollapsed();false по умолчанию. true временно игнорирует смещения и скрывает области захвата; содержимое панелей остаётся видимым. Сохранённые смещения восстанавливают действие после false, если не нормализовать их во время Collapsed.
boolТекущее сохранённое значение настройки.
IsDragAreaHighlightInEditorEnabledbool
public bool IsDragAreaHighlightInEditorEnabled();Показывает отладочную область захвата только в редакторе, false по умолчанию. Не включает подсветку в запущенной игре и не меняет размеры панелей.
boolТекущее сохранённое значение настройки.
IsDraggingEnabledbool
public bool IsDraggingEnabled();Разрешает пользовательское изменение границ, true по умолчанию. false останавливает текущее перетаскивание и отключает обработку мыши областью захвата, но не запрещает программно менять SplitOffsets.
boolТекущее сохранённое значение настройки.
IsDraggingNestedIntersectionsbool
public bool IsDraggingNestedIntersections();Разрешает совместное перетаскивание пересечений вложенных разделителей, false по умолчанию. Требуются включённые, видимые, развёрнутые SplitContainer с перпендикулярными осями и как минимум двумя панелями. Это не связывает произвольные соседние панели.
boolТекущее сохранённое значение настройки.
IsTouchDraggerEnabledbool
public bool IsTouchDraggerEnabled();Включает отдельные сенсорные элементы захвата, false по умолчанию. Не обходит Collapsed/DraggingEnabled. Включение также меняет расчёт промежутка: используется theme separation вместо максимума с размером обычного значка.
boolТекущее сохранённое значение настройки.
IsVerticalbool
public bool IsVertical();false — горизонтальные панели, true — вертикальные. Можно менять только у базового SplitContainer. HSplitContainer/VSplitContainer отклоняют любой вызов setter.
boolТекущее сохранённое значение настройки.
SetCollapsedvoid
public void SetCollapsed(bool collapsed);false по умолчанию. true временно игнорирует смещения и скрывает области захвата; содержимое панелей остаётся видимым. Сохранённые смещения восстанавливают действие после false, если не нормализовать их во время Collapsed.
| Имя | Тип | По умолчанию |
|---|---|---|
collapsed | bool | — |
collapsedfalse по умолчанию. true временно игнорирует смещения и скрывает области захвата; содержимое панелей остаётся видимым. Сохранённые смещения восстанавливают действие после false, если не нормализовать их во время Collapsed.
SetDragAreaHighlightInEditorvoid
public void SetDragAreaHighlightInEditor(bool dragAreaHighlightInEditor);Показывает отладочную область захвата только в редакторе, false по умолчанию. Не включает подсветку в запущенной игре и не меняет размеры панелей.
| Имя | Тип | По умолчанию |
|---|---|---|
dragAreaHighlightInEditor | bool | — |
dragAreaHighlightInEditorПоказывает отладочную область захвата только в редакторе, false по умолчанию. Не включает подсветку в запущенной игре и не меняет размеры панелей.
SetDragAreaMarginBeginvoid
public void SetDragAreaMarginBegin(int margin);Отступ области захвата от начального края вдоль разделителя, в пикселях; 0 по умолчанию. В горизонтальном SplitContainer это верхний край, в вертикальном — начальный горизонтальный край с учётом RTL. Не задаёт минимум размера панели.
| Имя | Тип | По умолчанию |
|---|---|---|
margin | int | — |
marginОтступ области захвата от начального края вдоль разделителя, в пикселях; 0 по умолчанию. В горизонтальном SplitContainer это верхний край, в вертикальном — начальный горизонтальный край с учётом RTL. Не задаёт минимум размера панели.
SetDragAreaMarginEndvoid
public void SetDragAreaMarginEnd(int margin);Отступ области захвата от конечного края вдоль разделителя, в пикселях; 0 по умолчанию. Сокращает длину области взаимодействия, не меняет SplitOffsets.
| Имя | Тип | По умолчанию |
|---|---|---|
margin | int | — |
marginОтступ области захвата от конечного края вдоль разделителя, в пикселях; 0 по умолчанию. Сокращает длину области взаимодействия, не меняет SplitOffsets.
SetDragAreaOffsetvoid
public void SetDragAreaOffset(int offset);Сдвиг области захвата поперёк разделителя в пикселях, 0 по умолчанию. Не сдвигает границу панелей; направление горизонтального сдвига учитывает RTL.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | int | — |
offsetСдвиг области захвата поперёк разделителя в пикселях, 0 по умолчанию. Не сдвигает границу панелей; направление горизонтального сдвига учитывает RTL.
SetDragNestedIntersectionsvoid
public void SetDragNestedIntersections(bool enabled);Разрешает совместное перетаскивание пересечений вложенных разделителей, false по умолчанию. Требуются включённые, видимые, развёрнутые SplitContainer с перпендикулярными осями и как минимум двумя панелями. Это не связывает произвольные соседние панели.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledРазрешает совместное перетаскивание пересечений вложенных разделителей, false по умолчанию. Требуются включённые, видимые, развёрнутые SplitContainer с перпендикулярными осями и как минимум двумя панелями. Это не связывает произвольные соседние панели.
SetDraggerVisibilityvoid
public void SetDraggerVisibility(SplitContainer.DraggerVisibilityEnum mode);Visible по умолчанию. Hidden скрывает значок захвата, сохраняя промежуток; HiddenCollapsed также убирает промежуток. Эти режимы не заменяют DraggingEnabled = false и не скрывают панели.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | SplitContainer.DraggerVisibilityEnum | — |
modeVisible по умолчанию. Hidden скрывает значок захвата, сохраняя промежуток; HiddenCollapsed также убирает промежуток. Эти режимы не заменяют DraggingEnabled = false и не скрывают панели.
SetDraggingEnabledvoid
public void SetDraggingEnabled(bool draggingEnabled);Разрешает пользовательское изменение границ, true по умолчанию. false останавливает текущее перетаскивание и отключает обработку мыши областью захвата, но не запрещает программно менять SplitOffsets.
| Имя | Тип | По умолчанию |
|---|---|---|
draggingEnabled | bool | — |
draggingEnabledРазрешает пользовательское изменение границ, true по умолчанию. false останавливает текущее перетаскивание и отключает обработку мыши областью захвата, но не запрещает программно менять SplitOffsets.
SetSplitOffsetvoid
public void SetSplitOffset(int offset);Устаревший доступ только к смещению первой границы. Для нескольких панелей используйте SplitOffsets; это не абсолютная ширина первой панели.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | int | — |
offsetСмещение только первой границы в пикселях относительно исходного распределения.
SetSplitOffsets2 перегрузки
public void SetSplitOffsets(int[] offsets);Смещения границ в пикселях относительно исходного распределения. Для N панелей нужны N − 1 смещений; установите после формирования детей или дождитесь раскладки. int[] копируется при чтении и записи. Видимое ограничение позиции не нормализует сохранённые значения; для этого служит ClampSplitOffset.
| Имя | Тип | По умолчанию |
|---|---|---|
offsets | int[] | — |
offsetsСмещения границ в пикселях относительно исходного распределения, по порядку панелей. Данные копируются.
public void SetSplitOffsets(ReadOnlySpan<int> offsets);Смещения границ в пикселях относительно исходного распределения. Для N панелей нужны N − 1 смещений; установите после формирования детей или дождитесь раскладки. int[] копируется при чтении и записи. Видимое ограничение позиции не нормализует сохранённые значения; для этого служит ClampSplitOffset.
| Имя | Тип | По умолчанию |
|---|---|---|
offsets | ReadOnlySpan<int> | — |
offsetsСмещения границ в пикселях относительно исходного распределения, по порядку панелей. Данные копируются.
SetTouchDraggerEnabledvoid
public void SetTouchDraggerEnabled(bool enabled);Включает отдельные сенсорные элементы захвата, false по умолчанию. Не обходит Collapsed/DraggingEnabled. Включение также меняет расчёт промежутка: используется theme separation вместо максимума с размером обычного значка.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledВключает отдельные сенсорные элементы захвата, false по умолчанию. Не обходит Collapsed/DraggingEnabled. Включение также меняет расчёт промежутка: используется theme separation вместо максимума с размером обычного значка.
SetVerticalvoid
public void SetVertical(bool vertical);false — горизонтальные панели, true — вертикальные. Можно менять только у базового SplitContainer. HSplitContainer/VSplitContainer отклоняют любой вызов setter.
| Имя | Тип | По умолчанию |
|---|---|---|
vertical | bool | — |
verticalfalse — горизонтальные панели, true — вертикальные. Можно менять только у базового SplitContainer. HSplitContainer/VSplitContainer отклоняют любой вызов setter.
Сигналы и события3
DragEndedСобытие
public event Action DragEnded;Окончание или прерывание активного пользовательского перетаскивания. Обычное программное изменение смещений без активного перетаскивания сигнал не вызывает.
DragStartedСобытие
public event Action DragStarted;Начало пользовательского перетаскивания разделителя. Программное присваивание SplitOffsets не вызывает этот сигнал. Индекс границы не передаётся.
DraggedСобытие
public event SplitContainer.DraggedEventHandler Dragged;Пользователь переместил разделитель: offset — сохранённое смещение активной границы относительно исходного распределения, не координата указателя. Индекса нет; для полного состояния прочитайте SplitOffsets. Обычное программное присваивание сигнал не вызывает.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | long | — |
offsetСмещение активной границы относительно исходного распределения; long в C# событии. Не содержит индекс границы.
SplitContainer.DraggerVisibilityEnum
| Значение | Описание |
|---|---|
Visible = 0 | Значок раздельного перетаскивателя всегда виден, когда |
Свойства темы
Это ключи ресурсов Theme, а не свойства C# класса. Используйте методы GetTheme…() и AddTheme…Override() у Control с соответствующим типом значения.
| Ключ и тип | Описание |
|---|---|
touch_dragger_colorColor | Цвет сенсорного перетаскивателя. По умолчанию:Color(1, 1, 1, 0.3) |
touch_dragger_hover_colorColor | Цвет сенсорного ползунка при наведении курсора. По умолчанию:Color(1, 1, 1, 0.6) |
touch_dragger_pressed_colorColor | Цвет сенсорного ползунка при нажатии. По умолчанию:Color(1, 1, 1, 1) |
autohideint | Логическое Bool значение. Если 1 |
minimum_grab_thicknessint | Минимальная толщина области, на которую пользователи могут щелкнуть, чтобы захватить разделительную полосу. Это гарантирует, что разделительную полосу можно будет перетаскивать, даже если размер 6 |
separationint | Толщина разделительной полосы, то есть расстояние между каждым дочерним элементом контейнера. Это значение переопределяется размером значка захвата, если 12 |
grabberTexture2D | Значок, используемый для элементов захвата, отображаемых в разделителях. Он используется только в |
h_grabberTexture2D | Значок, используемый для элементов захвата, отображаемых в разделительных линиях, когда |
h_touch_draggerTexture2D | Значок, используемый для маркера перетаскивания, когда |
touch_draggerTexture2D | Значок, используемый для ручки перетаскивания, когда |
v_grabberTexture2D | Значок, используемый для элементов захвата, отображаемых в разделительных линиях, когда |
v_touch_draggerTexture2D | Значок, используемый для маркера перетаскивания, когда |
split_bar_backgroundStyleBox | Определяет фон разделенной полосы, если ее толщина больше нуля. |