public static UIElement FindRoot(DependencyObject visual)
 {
   var parentWindow = Window.GetWindow(visual);
   var rootElement = parentWindow != null ? parentWindow.Content as UIElement : null;
   if (rootElement == null)
   {
     if (Application.Current != null && Application.Current.MainWindow != null)
     {
       rootElement = Application.Current.MainWindow.Content as UIElement;
     }
     if (rootElement == null)
     {
       rootElement = visual.GetVisualAncestor<Page>() ?? visual.GetVisualAncestor<UserControl>() as UIElement;
     }
   }
   //      i don't want the fu... windows forms reference
   //      if (rootElement == null) {
   //          var elementHost = m_DragInfo.VisualSource.GetVisualAncestor<ElementHost>();
   //          rootElement = elementHost != null ? elementHost.Child : null;
   //      }
   return rootElement;
 }
Example #2
0
        static void Scroll(DependencyObject o, DragEventArgs e)
        {
            ScrollViewer scrollViewer = o.GetVisualAncestor<ScrollViewer>();//o.GetVisualDescendent<ScrollViewer>();

            if (scrollViewer != null)
            {
                Point position = e.GetPosition(scrollViewer);
                double scrollMargin = Math.Min(scrollViewer.FontSize * 4, scrollViewer.ActualHeight / 2);

                if (position.X >= scrollViewer.ActualWidth - scrollMargin &&
                    scrollViewer.HorizontalOffset < scrollViewer.ExtentWidth - scrollViewer.ViewportWidth)
                {
                    scrollViewer.LineRight();
                }
                else if (position.X < scrollMargin && scrollViewer.HorizontalOffset > 0)
                {
                    scrollViewer.LineLeft();
                }
                else if (position.Y >= scrollViewer.ActualHeight - scrollMargin &&
                    scrollViewer.VerticalOffset <= scrollViewer.ExtentHeight - scrollViewer.ViewportHeight)
                {
                    scrollViewer.LineDown();
                }
                else if (position.Y < scrollMargin && scrollViewer.VerticalOffset >= 0)
                {
                    scrollViewer.LineUp();
                }
            }
        }