/// <summary>
 /// Should you decide to subclass a IdentifiedSurfaceButton and override onIdentifiedTouchDown or onIdentifiedTouchDown,
 /// then call base.onIdentifiedTouchDown or ...Up before doing anything else. 
 /// 
 /// You could also add your own PreviewIdentifiedTouchDownEvent or PreviewIdentifiedTouchUpEvent handlers. 
 /// 
 /// PreviewIdentifiedTouchMoveEvent is not supported by this class. You need to implement you own events.
 /// 
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void onIdentifiedTouchDown(object sender, RoutedIdentifiedTouchEventArgs e)
 {
     if (this.IsEnabled)
     {
         AnimationHelper.SetSurfaceButtonIsPressed(this, true);
         e.Handled = true; // Supress the event to avoid the bubbling event from being raised
         this.RaiseEvent(new RoutedIdentifiedEventArgs(IdentifiedSurfaceButton.IdentifiedClickEvent, e.ClientId));
     }
 }
 protected void onIdentifiedTouchLeave(object sender, RoutedIdentifiedTouchEventArgs e)
 {
     if (this.IsEnabled)
         AnimationHelper.SetSurfaceButtonIsPressed(this, false);
 }
 //private void Ellipse_PreviewIdentifiedTouchDown(object sender, RoutedEventArgs e)
 //{
 //    //Console.WriteLine("HEJSA, " + e.ClientId.Credentials.UserId);
 //    Console.WriteLine("HEJSA, ");
 //}
 private void Ellipse_PreviewIdentifiedTouchDown(object sender, RoutedIdentifiedTouchEventArgs e)
 {
     Console.WriteLine("HEJSA, " + e.ClientId.Credentials.UserId);
 }
        private void RaiseIdentifiedTouchEvent(TouchEventMessage message, UIElement visualHit, Point? hitPoint)
        {
            if (message is TouchDownMessage)
            {
                RoutedIdentifiedTouchEventArgs args = new RoutedIdentifiedTouchEventArgs(IdentifiedEvents.PreviewIdentifiedTouchDownEvent, ClientId, this, (Point)hitPoint);
                RaiseEventPair(visualHit, IdentifiedEvents.IdentifiedTouchDownEvent, args);
                _previousMoveTargetElement = visualHit;
            }
            else if (message is TouchMoveMessage)
            {

                if (_previousMoveTargetElement != visualHit)
                {
                    if (!UIElementsRelated(_previousMoveTargetElement, visualHit))
                    {
                        if (_previousMoveTargetElement != null)
                        {
                            RaiseEventPair(_previousMoveTargetElement, IdentifiedEvents.IdentifiedTouchLeaveEvent, new RoutedIdentifiedTouchEventArgs(IdentifiedEvents.PreviewIdentifiedTouchLeaveEvent, ClientId, this, (Point)hitPoint));
                        }
                        if (visualHit != null)
                        {
                            RaiseEventPair(visualHit, IdentifiedEvents.IdentifiedTouchEnterEvent, new RoutedIdentifiedTouchEventArgs(IdentifiedEvents.PreviewIdentifiedTouchEnterEvent, ClientId, this, (Point)hitPoint));
                        }
                    }
                    else
                    {
                        RaiseEventPair(visualHit, IdentifiedEvents.IdentifiedTouchMoveEvent, new RoutedIdentifiedTouchEventArgs(IdentifiedEvents.PreviewIdentifiedTouchMoveEvent, ClientId, this, (Point)hitPoint));
                    }
                    _previousMoveTargetElement = visualHit;
                }
                else
                {
                    RaiseEventPair(visualHit, IdentifiedEvents.IdentifiedTouchMoveEvent, new RoutedIdentifiedTouchEventArgs(IdentifiedEvents.PreviewIdentifiedTouchMoveEvent, ClientId, this, (Point)hitPoint));
                }
            }
            else if (message is TouchUpMessage)
            {
                RaiseEventPair(visualHit, IdentifiedEvents.IdentifiedTouchUpEvent, new RoutedIdentifiedTouchEventArgs(IdentifiedEvents.PreviewIdentifiedTouchUpEvent, ClientId, this, (Point)hitPoint));
                _previousMoveTargetElement = null;
            }
        }