private void FakeTab(Point drahPosition) { TabItem replaceItem = null; foreach (TabItem tab in Items) { Rect tabRect = TabItemRect(tab); if (tabRect.Contains(drahPosition)) { replaceItem = tab; break; } } if (replaceItem != null) { TabberItem tabberItem = replaceItem as TabberItem; if (tabberItem != null && !tabberItem.Pin && (oldReplaceItem == null || !oldReplaceItem.Equals(replaceItem))) { oldReplaceItem = replaceItem; int shadowIndex = shadowItem != null?Items.IndexOf(shadowItem) : -1; if (shadowItem == null) { shadowItem = new ShadowTabberItem(); shadowItem.Header = new string(' ', 24); } int replaceItemIndex = Items.IndexOf(replaceItem); if (shadowIndex > -1 && shadowIndex < replaceItemIndex) { Items.Remove(replaceItem); Items.Insert(shadowIndex, replaceItem); } else { Items.Remove(shadowItem); Items.Insert(replaceItemIndex, shadowItem); } shadowItem.IsSelected = true; } } else if ((Items[Items.Count - 1] as ShadowTabberItem) == null) { if (shadowItem == null) { shadowItem = new ShadowTabberItem(); shadowItem.Header = new string(' ', 24); Items.Add(shadowItem); } else { Items.Remove(shadowItem); Items.Add(shadowItem); } oldReplaceItem = null; shadowItem.IsSelected = true; } }
public TabberControl() : base() { firstSort = true; mainTabberIsEmpty = false; lastSelectedItem = null; shadowItem = null; Loaded += TabberControl_Loaded; Unloaded += TabberControl_Unloaded; }
internal void Move(ContentWindow window) { if (object.ReferenceEquals(window, currentWindow)) { return; } if (mainTabberIsEmpty) { if (EmptyItemsPanelRect(window.GetDragItem()) .Contains(window.GetDragPosition())) { FocusOrderWindow(window); if (shadowItem == null) { shadowItem = new ShadowTabberItem(); shadowItem.Header = new string(' ', 24); Items.Add(shadowItem); shadowItem.IsSelected = true; } } else { if (shadowItem != null) { Items.Remove(shadowItem); shadowItem = null; } } } else { if (ItemsPanelRect() .Contains(window.GetDragPosition())) { FocusOrderWindow(window); FakeTab(window.GetDragPosition()); } else { if (shadowItem != null) { Items.Remove(shadowItem); shadowItem = null; lastSelectedItem.IsSelected = true; } oldReplaceItem = null; } } }
internal void Enter(ContentWindow window) { if (object.ReferenceEquals(window, currentWindow)) { return; } mainTabberIsEmpty = (currentWindow as ContentWindow) == null && Items.Count < 1; if (!mainTabberIsEmpty) { foreach (TabItem item in Items) { if (item.IsSelected) { lastSelectedItem = item; break; } } } shadowItem = null; }