/*
         * private const string[] pointerStates =
         * {
         *  "Exit",
         *  "PreEnter",
         *  "Enter",
         *  "Fixation",
         *  "Dwel",
         *  "DwellRepeat"
         * };
         */

        private void RaiseGazePointerEvent(GazeTargetItem target, PointerState state, TimeSpan elapsedTime)
        {
            var control = target?.TargetElement;

            // assert(target != _rootElement);
            var gpea = new StateChangedEventArgs(control, state, elapsedTime);

            /*
             * if (control is Button buttonObj && buttonObj.Content != null)
             * {
             *     var buttonText = buttonObj.Content as string;
             *     Debug.WriteLine("GPE: {0} . {1}, {2}", buttonText, PointerStates[(int)state], elapsedTime);
             * }
             * else
             * {
             *     Debug.WriteLine("GPE: 0x%08x . %s, %d", target != null ? target.GetHashCode() : 0, PointerStates[(int)state], elapsedTime);
             * }
             */

            var gazeElement = target != null?GazeInput.GetGazeElement(control) : null;

            if (gazeElement != null)
            {
                gazeElement.RaiseStateChanged(control, gpea);
            }

            if (state == PointerState.Dwell)
            {
                var handled = false;

                if (gazeElement != null)
                {
                    var args = new DwellInvokedRoutedEventArgs();
                    gazeElement.RaiseInvoked(control, args);
                    handled = args.Handled;
                }

                if (!handled)
                {
                    target.Invoke();
                }
            }
        }
 internal void RaiseInvoked(object sender, DwellInvokedRoutedEventArgs args)
 {
     Invoked?.Invoke(sender, args);
 }