Exemplo n.º 1
0
        private static void TabControl_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            TabControl sourceTabControl = (TabControl)sender;

            sourceTabControl.PreviewMouseLeftButtonUp -= TabTearOffBehavior.TabControl_PreviewMouseLeftButtonUp;
            sourceTabControl.PreviewMouseMove         -= TabTearOffBehavior.TabControl_PreviewMouseMove;
            sourceTabControl.MouseLeave       -= TabTearOffBehavior.TabControl_MouseLeaveOrLostCapture;
            sourceTabControl.LostMouseCapture -= TabTearOffBehavior.TabControl_MouseLeaveOrLostCapture;
            if (sourceTabControl.IsMouseCaptured)
            {
                TabItem tabItem            = TabTearOffBehavior._activeTabItem;
                Point   dragWindowLocation = new Point
                {
                    X = TabTearOffBehavior._dragWindow.Left,
                    Y = TabTearOffBehavior._dragWindow.Top
                };
                sourceTabControl.ReleaseMouseCapture();
                if (TabTearOffBehavior._adorner != null)
                {
                    TabTearOffBehavior._adorner.Detach();
                    TabTearOffBehavior._adorner = null;
                }
                TabTearOffBehavior._dragWindow.Close();
                TabTearOffBehavior._dragWindow    = null;
                TabTearOffBehavior._activeTabItem = null;
                object             item        = sourceTabControl.ItemContainerGenerator.ItemFromContainer(tabItem);
                int                sourceIndex = sourceTabControl.ItemContainerGenerator.IndexFromContainer(tabItem);
                Window             dropWindow  = TabTearOffBehavior.GetWindowMouseIsOver(e);
                TabControl         targetTabControl;
                Panel              targetPanel;
                ITabTearOffHandler targetHandler;
                if (dropWindow != null &&
                    TabTearOffBehavior.IsMouseInDropLocation(e, targetTabControl = TabTearOffBehavior.FindTargetTabControl(dropWindow, out targetHandler), targetPanel = ControlMethods.GetPanel(targetTabControl)))
                {
                    int insertionIndex = TabTearOffBehavior.DetermineInsertionIndex(targetTabControl, e, targetPanel.GetOrientation());
                    if (!object.ReferenceEquals(sourceTabControl, targetTabControl))
                    {
                        if (targetHandler.AllowTargetedDrop(item, sourceTabControl, sourceIndex, targetTabControl, insertionIndex))
                        {
                            targetHandler.HandleTargetedDrop(item, sourceTabControl, sourceIndex, targetTabControl, insertionIndex);
                        }
                    }
                    else if (sourceTabControl.Items.Count != 1 &&
                             insertionIndex != sourceIndex &&
                             targetHandler.AllowReorder(item, sourceTabControl, sourceIndex, insertionIndex))
                    {
                        targetHandler.HandleReorder(item, sourceTabControl, sourceIndex, insertionIndex);
                    }
                }
                else
                {
                    ITabTearOffHandler sourceHandler = TabTearOffBehavior.GetHandler(sourceTabControl);
                    if (sourceHandler.AllowTargetlessDrop(item, sourceTabControl, sourceIndex, dragWindowLocation))
                    {
                        sourceHandler.HandleTargetlessDrop(item, sourceTabControl, sourceIndex, dragWindowLocation);
                    }
                }
            }
            e.Handled = true;
        }
Exemplo n.º 2
0
 private static TabControl FindTargetTabControl(Window dropWindow, out ITabTearOffHandler handler)
 {
     handler = null;
     foreach (TabControl tabControl in dropWindow.GetVisualTreeDescendents <TabControl>())
     {
         if ((handler = TabTearOffBehavior.GetHandler(tabControl)) != null)
         {
             return(tabControl);
         }
     }
     return(null);
 }
Exemplo n.º 3
0
            protected override void OnRender(DrawingContext drawingContext)
            {
                int insertionIndex                  = TabTearOffBehavior.DetermineInsertionIndex(this.AdornedElement, this._mouseEventArgs, this._orientation);
                ITabTearOffHandler handler          = TabTearOffBehavior.GetHandler(this.AdornedElement);
                TabControl         activeTabControl = TabTearOffBehavior._activeTabItem == null ? null : (TabControl)ItemsControl.ItemsControlFromItemContainer(TabTearOffBehavior._activeTabItem);

                if (activeTabControl == null ||
                    !this.AdornedElement.Equals(activeTabControl) && !handler.AllowTargetedDrop(activeTabControl.ItemContainerGenerator.ItemFromContainer(TabTearOffBehavior._activeTabItem), activeTabControl, activeTabControl.ItemContainerGenerator.IndexFromContainer(TabTearOffBehavior._activeTabItem), this.AdornedElement, insertionIndex) ||
                    this.AdornedElement.Equals(activeTabControl) && !handler.AllowReorder(activeTabControl.ItemContainerGenerator.ItemFromContainer(TabTearOffBehavior._activeTabItem), activeTabControl, activeTabControl.ItemContainerGenerator.IndexFromContainer(TabTearOffBehavior._activeTabItem), insertionIndex))
                {
                    return;
                }
                int       index = Math.Min(insertionIndex, this.AdornedElement.Items.Count - 1);
                UIElement container;

                if ((container = (UIElement)this.AdornedElement.ItemContainerGenerator.ContainerFromIndex(index)) == null)
                {
                    return;
                }
                Rect   itemRect = new Rect(container.TranslatePoint(default(Point), this.AdornedElement), container.RenderSize);
                Point  point1, point2;
                double rotation;

                if (this._orientation == Orientation.Vertical)
                {
                    if (insertionIndex == this.AdornedElement.Items.Count)
                    {
                        itemRect.Y += container.RenderSize.Height;
                    }
                    point1   = new Point(itemRect.X - InsertionAdorner.Size, itemRect.Y);
                    point2   = new Point(itemRect.Right + InsertionAdorner.Size, itemRect.Y);
                    rotation = 0;
                }
                else
                {
                    if (insertionIndex == this.AdornedElement.Items.Count)
                    {
                        itemRect.X += container.RenderSize.Width;
                    }
                    point1   = new Point(itemRect.X, itemRect.Y - InsertionAdorner.Size);
                    point2   = new Point(itemRect.X, itemRect.Bottom + InsertionAdorner.Size);
                    rotation = 90d;
                }
                InsertionAdorner.DrawArrow(drawingContext, point1, rotation);
                InsertionAdorner.DrawArrow(drawingContext, point2, 180d + rotation);
            }
Exemplo n.º 4
0
 public ShellView(
     IFactory <FirmSummaryView> firmSummaryViewFactory,
     IFactory <FirmSummaryViewModel> firmSummaryViewModelFactory,
     IFactory <PositionsView> positionsViewFactory,
     IFactory <PortfolioModel, PositionsViewModel> positionsViewModelFactory,
     ITabTearOffHandler tabTearOffHandler,
     ShellViewModel shellViewModel
     )
 {
     this.InitializeComponent();
     this._firmSummaryViewFactory      = firmSummaryViewFactory;
     this._firmSummaryViewModelFactory = firmSummaryViewModelFactory;
     this._positionsViewFactory        = positionsViewFactory;
     this._positionsViewModelFactory   = positionsViewModelFactory;
     this.TabTearOffHandler            = tabTearOffHandler;
     this.DataContext = shellViewModel;
     this.Loaded     += this.ShellView_Loaded;
 }
Exemplo n.º 5
0
 public static void SetHandler(TabControl tabControl, ITabTearOffHandler handler)
 {
     tabControl?.SetValue(TabTearOffBehavior.HandlerProperty, handler);
 }