79747894

Date: 2025-08-27 11:14:53
Score: 0.5
Natty:
Report link

So, the solution was to set PointerCaptureLostEvent RoutingStrategies to Direct and capture pointer in (new) OnCaptureLost method.

Now the button releases when I release finger out of the button area. I don't need PointerMovedEvent to handle this situation.

public MomentaryButton()
{
    AddHandler(PointerPressedEvent, OnPress, RoutingStrategies.Tunnel);
    AddHandler(PointerReleasedEvent, OnRelease, RoutingStrategies.Tunnel);
    AddHandler(PointerCaptureLostEvent, OnCaptureLost, RoutingStrategies.Direct);
}

private void OnPress(object? sender, PointerPressedEventArgs e)
{
    if (Disabled) return;

    PressInternal();

    e.Pointer.Capture(this);
}

private void OnRelease(object? sender, PointerEventArgs e)
{
    ReleaseInternal();

    e.Pointer.Capture(null);
}

private void OnCaptureLost(object? sender, PointerCaptureLostEventArgs e)
{
    e.Pointer.Capture(this);
}
Reasons:
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: mmmihovil