private void Border_OnMouseLeave(object sender, MouseEventArgs e)
        {
            if (!(sender is Border border))
            {
                return;
            }

            InfoBubbleViewModel.NodeMessageVisibility nodeMessageVisibility = InfoBubbleViewModel.NodeMessageVisibility.Icon;
            HorizontalAlignment horizontalAlignment = HorizontalAlignment.Left;

            switch (border.Name)
            {
            case "InfoBorder":
                InfoBorder.HorizontalAlignment    = horizontalAlignment;
                ViewModel.NodeInfoVisibilityState = nodeMessageVisibility;
                break;

            case "WarningsBorder":
                WarningsBorder.HorizontalAlignment    = horizontalAlignment;
                ViewModel.NodeWarningsVisibilityState = nodeMessageVisibility;
                break;

            case "ErrorsBorder":
                ErrorsBorder.HorizontalAlignment    = horizontalAlignment;
                ViewModel.NodeErrorsVisibilityState = nodeMessageVisibility;
                break;

            default:
                return;
            }

            e.Handled = true;
        }
        private void Border_OnMouseEnter(object sender, MouseEventArgs e)
        {
            if (!(sender is Border border))
            {
                return;
            }

            InfoBubbleViewModel.NodeMessageVisibility collapsed = InfoBubbleViewModel.NodeMessageVisibility.CollapseMessages;
            InfoBubbleViewModel.NodeMessageVisibility icon      = InfoBubbleViewModel.NodeMessageVisibility.Icon;
            HorizontalAlignment stretch = HorizontalAlignment.Stretch;
            HorizontalAlignment left    = HorizontalAlignment.Left;

            bool isIcon;

            switch (border.Name)
            {
            case "InfoBorder":
                isIcon = ViewModel.NodeInfoVisibilityState == InfoBubbleViewModel.NodeMessageVisibility.Icon;
                ViewModel.NodeInfoVisibilityState = isIcon ? collapsed : icon;
                break;

            case "WarningsBorder":
                isIcon = ViewModel.NodeWarningsVisibilityState == InfoBubbleViewModel.NodeMessageVisibility.Icon;
                ViewModel.NodeWarningsVisibilityState = isIcon ? collapsed : icon;
                break;

            case "ErrorsBorder":
                isIcon = ViewModel.NodeErrorsVisibilityState == InfoBubbleViewModel.NodeMessageVisibility.Icon;
                ViewModel.NodeErrorsVisibilityState = isIcon ? collapsed : icon;
                break;

            default:
                return;
            }

            border.HorizontalAlignment = isIcon ? stretch : left;
            ViewModel.NodeWarningsShowLessMessageVisible = false;
            e.Handled = true;
        }