public FluentElement <T> Register <TEvent>(Call <TEvent> c, TrickleDown trickleDown = TrickleDown.NoTrickleDown) where TEvent : EventBase <TEvent>, new()
        {
            var handler = new CallHandle
            {
                x           = x,
                eventTypeId = EventBase <TEvent> .TypeId()
            };
            var callback = (EventCallback <TEvent>)(evt =>
            {
                handler.evt = evt;
                handler.totalCalls++;
                handler.trickle = trickleDown;

                c.Invoke(evt, handler);
            });

            handler.callback = callback;

            x.RegisterCallback(callback, trickleDown);

            if (EventStorage <TEvent> .Handlers.ContainsKey(c))
            {
                EventStorage <TEvent> .Handlers[c] = handler;
            }
            else
            {
                EventStorage <TEvent> .Handlers.Add(c, handler);
            }

            return(x);
        }
 public FluentElement <T> Unregister(CallHandle handle)
 {
     FluentUITK.UnregisterCallback(x, handle.eventTypeId, handle.callback, handle.trickle);
     return(x);
 }