private static void LogicalDisplayerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
 {
     if (d is Panel panel)
     {
         LogicalDisplayers.Add(panel);
     }
 }
 private static void MouseUpLogical(object sender, MouseButtonEventArgs e)
 {
     if (e.OriginalSource is DependencyObject)
     {
         DependencyObject currentElement = e.OriginalSource as DependencyObject;
         LogicalDisplayers.ForEach(d => d.Children.Clear());
         bool print = true;
         do
         {
             if (print)
             {
                 foreach (var item in LogicalDisplayers)
                 {
                     TextBlock block = new TextBlock();
                     block.Text = currentElement.ToString();
                     if (currentElement is FrameworkElement element)
                     {
                         block.ToolTip = "DataContext: " + element.DataContext?.ToString();
                     }
                     else if (currentElement is FrameworkContentElement celement)
                     {
                         block.ToolTip = "DataContext: " + celement.DataContext?.ToString();
                     }
                     item.Children.Add(block);
                 }
             }
             print = true;
             DependencyObject nextElement = LogicalTreeHelper.GetParent(currentElement);
             if (nextElement == null)
             {
                 if (currentElement is FrameworkElement fe)
                 {
                     nextElement = fe.TemplatedParent ?? fe.Parent;
                 }
                 else if (currentElement is FrameworkContentElement fce)
                 {
                     nextElement = fce.TemplatedParent ?? fce.Parent;
                 }
                 if (nextElement == null)
                 {
                     nextElement = VisualTreeHelper.GetParent(currentElement);
                     print       = false;
                 }
             }
             currentElement = nextElement;
         } while (currentElement != null);
     }
 }