docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class MasonryGridView

    A GridView that arranges items in a masonry layout pattern, similar to Pinterest's layout.

    Inheritance
    object
    CallbackEventHandler
    Focusable
    VisualElement
    BindableElement
    BaseGridView
    MasonryGridView
    Implements
    IEventHandler
    IResolvedStyle
    ITransform
    ITransitionAnimations
    IExperimentalFeatures
    IVisualElementScheduler
    IBindable
    ISerializationCallbackReceiver
    Inherited Members
    BaseGridView.ussClassName
    BaseGridView.itemUssClassName
    BaseGridView.firstColumnUssClassName
    BaseGridView.lastColumnUssClassName
    BaseGridView.scrollView
    BaseGridView.CancelDrag()
    BaseGridView.bindItem
    BaseGridView.columnCount
    BaseGridView.dragger
    BaseGridView.operationMask
    BaseGridView.contentContainer
    BaseGridView.itemWidth
    BaseGridView.itemsSource
    BaseGridView.makeItem
    BaseGridView.destroyItem
    BaseGridView.resolvedItemWidth
    BaseGridView.selectedIndex
    BaseGridView.selectedIndices
    BaseGridView.selectedItem
    BaseGridView.selectedItems
    BaseGridView.selectedIds
    BaseGridView.selectionCount
    BaseGridView.IsSelectedId(int)
    BaseGridView.selectionType
    BaseGridView.allowNoSelection
    BaseGridView.isSelecting
    BaseGridView.preventScrollWithModifiers
    BaseGridView.unbindItem
    BaseGridView.getItemId
    BaseGridView.itemsChosen
    BaseGridView.selectionChanged
    BaseGridView.selectedIndicesChanged
    BaseGridView.contextClicked
    BaseGridView.doubleClicked
    BaseGridView.dragStarted
    BaseGridView.dragUpdated
    BaseGridView.dragFinished
    BaseGridView.dragCanceled
    BaseGridView.AddToSelection(int)
    BaseGridView.ClearSelection()
    BaseGridView.ClearSelectionWithoutNotify()
    BaseGridView.RemoveFromSelection(int)
    BaseGridView.SetSelection(int)
    BaseGridView.SetSelection(IEnumerable<int>)
    BaseGridView.SetSelectionWithoutNotify(IEnumerable<int>)
    BaseGridView.GetIdFromIndex(int)
    BaseGridView.HasValidDataAndBindings()
    BaseGridView.PostSelection(bool, bool)
    BindableElement.binding
    BindableElement.bindingPath
    VisualElement.disabledUssClassName
    VisualElement.SetActivePseudoState(bool)
    VisualElement.SetCheckedPseudoState(bool)
    VisualElement.Focus()
    VisualElement.SendEvent(EventBase)
    VisualElement.SetEnabledFromHierarchy(bool)
    VisualElement.SetEnabled(bool)
    VisualElement.MarkDirtyRepaint()
    VisualElement.IsMarkedForRepaint()
    VisualElement.ContainsPoint(Vector2)
    VisualElement.Overlaps(Rect)
    VisualElement.DoMeasure(float, VisualElement.MeasureMode, float, VisualElement.MeasureMode)
    VisualElement.ToString()
    VisualElement.GetClasses()
    VisualElement.ClearClassList()
    VisualElement.AddToClassList(string)
    VisualElement.RemoveFromClassList(string)
    VisualElement.ToggleInClassList(string)
    VisualElement.EnableInClassList(string, bool)
    VisualElement.ClassListContains(string)
    VisualElement.FindAncestorUserData()
    VisualElement.SetBinding(BindingId, Binding)
    VisualElement.GetBinding(BindingId)
    VisualElement.TryGetBinding(BindingId, out Binding)
    VisualElement.GetBindingInfos()
    VisualElement.GetBindingInfos(List<BindingInfo>)
    VisualElement.HasBinding(BindingId)
    VisualElement.ClearBinding(BindingId)
    VisualElement.ClearBindings()
    VisualElement.GetHierarchicalDataSourceContext()
    VisualElement.GetDataSourceContext(BindingId)
    VisualElement.TryGetDataSourceContext(BindingId, out DataSourceContext)
    VisualElement.TryGetLastBindingToUIResult(in BindingId, out BindingResult)
    VisualElement.TryGetLastBindingToSourceResult(in BindingId, out BindingResult)
    VisualElement.Add(VisualElement)
    VisualElement.Insert(int, VisualElement)
    VisualElement.Remove(VisualElement)
    VisualElement.RemoveAt(int)
    VisualElement.Clear()
    VisualElement.ElementAt(int)
    VisualElement.IndexOf(VisualElement)
    VisualElement.Children()
    VisualElement.Sort(Comparison<VisualElement>)
    VisualElement.BringToFront()
    VisualElement.SendToBack()
    VisualElement.PlaceBehind(VisualElement)
    VisualElement.PlaceInFront(VisualElement)
    VisualElement.RemoveFromHierarchy()
    VisualElement.GetFirstOfType<T>()
    VisualElement.GetFirstAncestorOfType<T>()
    VisualElement.Contains(VisualElement)
    VisualElement.FindCommonAncestor(VisualElement)
    VisualElement.viewDataKey
    VisualElement.userData
    VisualElement.canGrabFocus
    VisualElement.focusController
    VisualElement.disablePlayModeTint
    VisualElement.usageHints
    VisualElement.transform
    VisualElement.scaledPixelsPerPoint
    VisualElement.layout
    VisualElement.contentRect
    VisualElement.paddingRect
    VisualElement.worldBound
    VisualElement.localBound
    VisualElement.worldTransform
    VisualElement.hasActivePseudoState
    VisualElement.hasInactivePseudoState
    VisualElement.hasHoverPseudoState
    VisualElement.hasCheckedPseudoState
    VisualElement.hasEnabledPseudoState
    VisualElement.hasDisabledPseudoState
    VisualElement.hasFocusPseudoState
    VisualElement.hasRootPseudoState
    VisualElement.pickingMode
    VisualElement.name
    VisualElement.enabledInHierarchy
    VisualElement.enabledSelf
    VisualElement.languageDirection
    VisualElement.visible
    VisualElement.generateVisualContent
    VisualElement.dataSource
    VisualElement.dataSourcePath
    VisualElement.dataSourceType
    VisualElement.experimental
    VisualElement.hierarchy
    VisualElement.cacheAsBitmap
    VisualElement.parent
    VisualElement.panel
    VisualElement.visualTreeAssetSource
    VisualElement.this[int]
    VisualElement.childCount
    VisualElement.schedule
    VisualElement.style
    VisualElement.resolvedStyle
    VisualElement.customStyle
    VisualElement.styleSheets
    VisualElement.tooltip
    Focusable.Blur()
    Focusable.focusable
    Focusable.tabIndex
    Focusable.delegatesFocus
    CallbackEventHandler.RegisterCallback<TEventType>(EventCallback<TEventType>, TrickleDown)
    CallbackEventHandler.RegisterCallbackOnce<TEventType>(EventCallback<TEventType>, TrickleDown)
    CallbackEventHandler.RegisterCallback<TEventType, TUserArgsType>(EventCallback<TEventType, TUserArgsType>, TUserArgsType, TrickleDown)
    CallbackEventHandler.RegisterCallbackOnce<TEventType, TUserArgsType>(EventCallback<TEventType, TUserArgsType>, TUserArgsType, TrickleDown)
    CallbackEventHandler.RegisterCallback<TEventType>(EventCallback<TEventType>, CallbackOptions)
    CallbackEventHandler.RegisterCallback<TEventType, TUserArgsType>(EventCallback<TEventType, TUserArgsType>, TUserArgsType, CallbackOptions)
    CallbackEventHandler.UnregisterCallback<TEventType>(EventCallback<TEventType>, TrickleDown)
    CallbackEventHandler.UnregisterCallback<TEventType>(EventCallback<TEventType>, CallbackOptions)
    CallbackEventHandler.UnregisterCallback<TEventType, TUserArgsType>(EventCallback<TEventType, TUserArgsType>, TrickleDown)
    CallbackEventHandler.UnregisterCallback<TEventType, TUserArgsType>(EventCallback<TEventType, TUserArgsType>, CallbackOptions)
    CallbackEventHandler.UnregisterAllRemovableCallbacks()
    CallbackEventHandler.HasTrickleDownHandlers()
    CallbackEventHandler.HasBubbleUpHandlers()
    CallbackEventHandler.ExecuteDefaultActionAtTarget(EventBase)
    CallbackEventHandler.HandleEventBubbleUp(EventBase)
    CallbackEventHandler.HandleEventTrickleDown(EventBase)
    CallbackEventHandler.ExecuteDefaultAction(EventBase)
    CallbackEventHandler.NotifyPropertyChanged(in BindingId)
    object.Equals(object)
    object.Equals(object, object)
    object.GetHashCode()
    object.GetType()
    object.MemberwiseClone()
    object.ReferenceEquals(object, object)
    Namespace: Unity.AppUI.UI
    Assembly: Unity.AppUI.dll
    Syntax
    [UxmlElement]
    public class MasonryGridView : BaseGridView, IEventHandler, IResolvedStyle, ITransform, ITransitionAnimations, IExperimentalFeatures, IVisualElementScheduler, IBindable, ISerializationCallbackReceiver
    Remarks

    The MasonryGridView is a specialized grid layout component that arranges items in a vertical masonry pattern. Unlike traditional grid layouts where items must conform to a fixed grid, the masonry layout allows items of varying heights while maintaining aligned columns.

    This layout is particularly useful for displaying content of varying heights, such as images, cards, or content blocks, in a visually appealing and space-efficient manner.

    Key features include:

    • Dynamic column arrangement
    • Support for items with varying heights
    • Efficient item recycling for optimal performance
    • Built-in selection management
    • Smooth scrolling with viewport item management
    Examples

    Basic setup of a MasonryGridView with custom items:

    Creating and configuring a MasonryGridView

    var masonryGrid = new MasonryGridView() {
        columnCount = 3,
        selectionType = SelectionType.Single,
        pack = true
    };
    

    // Setup item source masonryGrid.itemsSource = items;

    // Define how items are created masonryGrid.makeItem = () => new CustomItemElement();

    // Define how items are bound masonryGrid.bindItem = (element, index) => { var item = (CustomItemElement)element; item.SetData(itemsSource[index]); };

    Using MasonryGridView in UXML:

    UXML definition of a MasonryGridView

    <ui:UXML xmlns:ui="UnityEngine.UIElements">
        <ui:MasonryGridView
            column-count="3"
            selection-type="Multiple"
            pack="true"
            style="height: 100%;" />
    </ui:UXML>

    Handling selection changes:

    Setting up selection event handlers

    masonryGrid.selectionChanged += (selectedItems) => {
        foreach (var item in selectedItems) {
            Debug.Log($"Selected item: {item}");
        }
    };
    

    masonryGrid.itemsChosen += (chosenItems) => { // Handle double-click or Enter key on selected items foreach (var item in chosenItems) { Debug.Log($"Chosen item: "); } };

    Constructors

    MasonryGridView()

    Constructs a new MasonryGridView.

    Declaration
    public MasonryGridView()

    Fields

    columnContainerUssClassName

    The column container USS class name of a MasonryGridView.

    Declaration
    public static readonly string columnContainerUssClassName
    Field Value
    Type Description
    string

    columnUssClassName

    The columns USS class name of a MasonryGridView.

    Declaration
    public static readonly string columnUssClassName
    Field Value
    Type Description
    string

    masonryGridViewUssClassName

    The USS class name of a MasonryGridView.

    Declaration
    public static readonly string masonryGridViewUssClassName
    Field Value
    Type Description
    string

    Properties

    pack

    Whether to pack the items (the grid will try to take the minimum space possible by distributing the items in the columns).

    Declaration
    [CreateProperty]
    [UxmlAttribute]
    public bool pack { get; set; }
    Property Value
    Type Description
    bool

    Methods

    ApplySelectedState()

    Set the selected visual state on items.

    Declaration
    protected override void ApplySelectedState()
    Overrides
    BaseGridView.ApplySelectedState()

    GetIndexByWorldPosition(Vector2)

    Returns the index of the item at the given position.

    Declaration
    public override int GetIndexByWorldPosition(Vector2 worldPosition)
    Parameters
    Type Name Description
    Vector2 worldPosition

    The position of the item in the world-space.

    Returns
    Type Description
    int

    The index of the item at the given position.

    Overrides
    BaseGridView.GetIndexByWorldPosition(Vector2)
    Remarks

    The position is relative to the top left corner of the grid. No check is made to see if the index is valid.

    GetVisualElementInternal(int)

    Implement this method to return the VisualElement at the specified index.

    Declaration
    protected override VisualElement GetVisualElementInternal(int index)
    Parameters
    Type Name Description
    int index

    The index of the VisualElement to return.

    Returns
    Type Description
    VisualElement

    The VisualElement at the specified index.

    Overrides
    BaseGridView.GetVisualElementInternal(int)

    OnContainerHeightChanged(float)

    Callback called when the ScrollView container height changes.

    Declaration
    protected override void OnContainerHeightChanged(float height)
    Parameters
    Type Name Description
    float height

    The new height of the container.

    Overrides
    BaseGridView.OnContainerHeightChanged(float)

    OnCustomStyleResolved(CustomStyleResolvedEvent)

    Method to implement to handle the custom style resolved event.

    Declaration
    protected override void OnCustomStyleResolved(CustomStyleResolvedEvent e)
    Parameters
    Type Name Description
    CustomStyleResolvedEvent e

    The custom style resolved event.

    Overrides
    BaseGridView.OnCustomStyleResolved(CustomStyleResolvedEvent)

    OnScroll(float)

    Callback called when the scroll value changes.

    Declaration
    protected override void OnScroll(float offset)
    Parameters
    Type Name Description
    float offset

    The new scroll offset.

    Overrides
    BaseGridView.OnScroll(float)
    Remarks

    You can also call this method one frame your Refresh() implementation to ensure the visual state of the grid is updated correctly.

    Refresh()

    Clears the GridView, recreates all visible visual elements, and rebinds all items.

    Declaration
    public override void Refresh()
    Overrides
    BaseGridView.Refresh()
    Remarks

    Call this method whenever the data source changes.

    ScrollToItem(int)

    Scrolls to a specific item index and makes it visible.

    Declaration
    public override void ScrollToItem(int index)
    Parameters
    Type Name Description
    int index

    Item index to scroll to. Specify -1 to make the last item visible.

    Overrides
    BaseGridView.ScrollToItem(int)

    Implements

    IEventHandler
    IResolvedStyle
    ITransform
    ITransitionAnimations
    IExperimentalFeatures
    IVisualElementScheduler
    IBindable
    ISerializationCallbackReceiver

    Extension Methods

    VisualElementExtensions.FindNavController(VisualElement)
    RegisterUpdateCallbackExtensions.RegisterUpdateCallback(VisualElement, EventCallback<UpdateEvent>)
    RegisterUpdateCallbackExtensions.UnregisterUpdateCallback(VisualElement, EventCallback<UpdateEvent>)
    VisualElementExtensions.EnableDynamicTransform(VisualElement, bool)
    VisualElementExtensions.EnablePicking(VisualElement, bool)
    VisualElementExtensions.GetChildren<T>(VisualElement, bool)
    VisualElementExtensions.GetContextProvider<T>(VisualElement)
    VisualElementExtensions.GetContextProvider<T>(VisualElement, string)
    VisualElementExtensions.GetContext<T>(VisualElement)
    VisualElementExtensions.GetContext<T>(VisualElement, string)
    VisualElementExtensions.GetExclusiveRootElement(VisualElement)
    VisualElementExtensions.GetLastAncestorOfType<T>(VisualElement)
    VisualElementExtensions.GetPreferredTooltipPlacement(VisualElement)
    VisualElementExtensions.GetSelfContext<T>(VisualElement)
    VisualElementExtensions.GetSelfContext<T>(VisualElement, string)
    VisualElementExtensions.GetTooltipContent(VisualElement)
    VisualElementExtensions.GetTooltipTemplate(VisualElement)
    VisualElementExtensions.HasAncestorOfType<T>(VisualElement, bool)
    VisualElementExtensions.HasAncestorsOfType<T>(VisualElement)
    VisualElementExtensions.IsContextProvider<T>(VisualElement)
    VisualElementExtensions.IsContextProvider<T>(VisualElement, string)
    VisualElementExtensions.IsInvisible(VisualElement)
    VisualElementExtensions.IsOnScreen(VisualElement)
    VisualElementExtensions.ProvideContext<T>(VisualElement, string, T)
    VisualElementExtensions.ProvideContext<T>(VisualElement, T)
    VisualElementExtensions.RegisterContextChangedCallback<T>(VisualElement, string, EventCallback<ContextChangedEvent<T>>)
    VisualElementExtensions.RegisterContextChangedCallback<T>(VisualElement, EventCallback<ContextChangedEvent<T>>)
    VisualElementExtensions.SetPreferredTooltipPlacement(VisualElement, OptionalEnum<PopoverPlacement>)
    VisualElementExtensions.SetTooltipContent(VisualElement, VisualElementExtensions.TooltipContentCallback)
    VisualElementExtensions.SetTooltipTemplate(VisualElement, VisualElement)
    VisualElementExtensions.UnregisterContextChangedCallback<T>(VisualElement, string, EventCallback<ContextChangedEvent<T>>)
    VisualElementExtensions.UnregisterContextChangedCallback<T>(VisualElement, EventCallback<ContextChangedEvent<T>>)
    In This Article
    Back to top
    Copyright © 2026 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)