Skip to main content

PopupDragCompletedEventArgs.End Property

Returns the Popup’s position after a drag-and-drop operation.

Namespace: DevExpress.Blazor

Assembly: DevExpress.Blazor.v24.1.dll

NuGet Package: DevExpress.Blazor

Declaration

public Point End { get; }

Property Value

Type Description
Point

The final coordinates.

Remarks

The following code snippet handles DragStarted and DragCompleted events to save and load the current window position.

<div class="target-container" @onclick="@(() => PopupVisible = true)">
    <p class="target-caption">CLICK TO SHOW A POP-UP WINDOW</p>
</div>
<DxPopup AllowDrag="true"
         HeaderText="Popup"
         @bind-Visible="@PopupVisible"
         BodyText="@Constants.Text"
         PositionX="positionX"
         PositionY="positionY"
         DragCompleted="OnPopupDragCompleted">
</DxPopup>

@code {
    bool PopupVisible { get; set; } = false;
    const string LocalStorageKey = "DialogsAndWindows-Popup-Dragging";
    int? positionX, positionY;

    protected override async Task OnAfterRenderAsync(bool firstRender) {
        if (firstRender) {
            var position = await LoadPositionFromLocalStorageAsync();
            (positionX, positionY) = (position?.X ?? null, position?.Y ?? null);
            StateHasChanged();
        }
    }
    async Task OnPopupDragCompleted(PopupDragCompletedEventArgs args) {
        (positionX, positionY) = (args.End.X, args.End.Y);
        await SavePositionToLocalStorageAsync(args.End);
    }
    async Task<Point?> LoadPositionFromLocalStorageAsync() {
        var json = await JSRuntime.InvokeAsync<string>("localStorage.getItem", LocalStorageKey);
        return string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize<Point>(json);
    }
    async Task SavePositionToLocalStorageAsync(Point position) {
        await JSRuntime.InvokeVoidAsync("localStorage.setItem", LocalStorageKey, JsonSerializer.Serialize(position));
    }
}
See Also