private void OnWhitespaceMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     _whitespace.MouseMove -= OnWhitespaceMouseMove;
     _whitespace.MouseLeftButtonUp -= OnWhitespaceMouseLeftButtonUp;
     _whitespace = null;
     _userCard = null;
 }
        private UserCard CreateUserCard(UserVo user, int level)
        {
            var userCard = new UserCard {User = user};

            double left = Math.Round(HorizontalCenter - (userCard.Width*_itemsLevels[level].Count/2));
            userCard.Top = VerticalGap*(level + 1) + userCard.Height*level;
            userCard.Left = left + userCard.Width*_itemsLevels[level].Proccesed +
                            HorizontalGap*(_itemsLevels[level].Proccesed + 1);

            userCard.SetValue(FrameworkElement.NameProperty, "UserCard" + _userCardNumber++);
            Canvas.SetZIndex(userCard, 2);
            userCard.MouseLeftButtonDown += _mouseLeftButtonDownHandler;
            _whitespace.Children.Add(userCard);

            _itemsLevels[level].Proccesed++;

            foreach (UserVo childUser in user.Users)
            {
                UserCard childUserCard = CreateUserCard(childUser, level + 1);

                var line = new ConnectionLine {ParentUserCard = userCard, ChildUserCard = childUserCard};
                Canvas.SetZIndex(line, 1);
                _whitespace.Children.Add(line);
            }

            return userCard;
        }
        public UserCardMover(UIElement whitespace, UserCard userCard, Point position)
        {
            _whitespace = whitespace;
            _userCard = userCard;
            _whitespacePosition = position;
            _userCardPosition = new Point(userCard.Left, userCard.Top);

            whitespace.MouseMove += OnWhitespaceMouseMove;
            whitespace.MouseLeftButtonUp += OnWhitespaceMouseLeftButtonUp;
        }