/// <summary> /// Dock the new content next to content</summary> /// <param name="nextTo">Dock content to add new content next to</param> /// <param name="newContent">New content to be docked</param> /// <param name="dockTo">Side of nextTo content where new content should be docked</param> public void Dock(IDockContent nextTo, IDockContent newContent, DockTo dockTo) { TabLayout tabLayout = newContent as TabLayout; if (tabLayout != null) { IEnumerator <DockContent> contentEnumerator = tabLayout.Children.GetEnumerator(); while (contentEnumerator.MoveNext()) { DockContent content = contentEnumerator.Current; tabLayout.RemoveItem(content); AddOneItem((DockContent)nextTo, content); contentEnumerator = tabLayout.Children.GetEnumerator(); } } else { AddOneItem((DockContent)nextTo, newContent as DockContent); } Focus(); UpdateLayout(); }
/// <summary> /// Constructor used when window is created as consequence to user interaction. /// </summary> /// <param name="root">Parent dock panel</param> /// <param name="content">Content to host</param> /// <param name="origin">Origin, position on screen</param> /// <param name="size">Size of window</param> public FloatingWindow(DockPanel root, IDockContent content, Point origin, Size size) : this(root) { Left = origin.X; Top = origin.Y; Width = size.Width; Height = size.Height; if (content is TabLayout) { DockedContent = (TabLayout)content; } else { DockedContent = new TabLayout(Root); DockedContent.Dock(null, content, DockTo.Center); } foreach (DockContent subContent in DockedContent.Children) { subContent.Settings.DockState = DockState.Floating; } Content = DockedContent; Binding b = new Binding("Header"); b.Source = DockedContent; SetBinding(Window.TitleProperty, b); }
/// <summary> /// Generate object from its XML representation</summary> /// <param name="reader">XmlReader stream from which object is deserialized</param> public void ReadXml(System.Xml.XmlReader reader) { if (reader.ReadToFollowing(this.GetType().Name)) { reader.ReadStartElement(); if (reader.LocalName == typeof(TabLayout).Name || reader.LocalName == "MultiContent") // MultiContent is old name and is used here for compatibility with old saved layouts { DockedContent = new TabLayout(Root, reader.ReadSubtree()); Content = DockedContent; reader.ReadEndElement(); } reader.ReadEndElement(); } }
public void ReadXml(System.Xml.XmlReader reader) { if (reader.ReadToFollowing(this.GetType().Name)) { reader.ReadStartElement(this.GetType().Name); if (reader.LocalName == typeof(TabLayout).Name || reader.LocalName == "MultiContent") // MultiContent is old name and is used here for compatibility with old saved layouts { DockedContent = new TabLayout(Root, reader.ReadSubtree()); if (DockedContent.Children.Count > 0) { ContentSettings contentSettings = DockedContent.Children[0].Settings; Left = contentSettings.Location.X; Top = contentSettings.Location.Y; Width = contentSettings.Size.Width; Height = contentSettings.Size.Height; Left = Math.Max(0, Math.Min(Left, SystemParameters.VirtualScreenWidth - Width)); Top = Math.Max(0, Math.Min(Top, SystemParameters.VirtualScreenHeight - Height)); Width = Math.Max(Math.Min(Width, SystemParameters.VirtualScreenWidth - Left), 100); Height = Math.Max(Math.Min(Height, SystemParameters.VirtualScreenHeight - Top), 100); reader.ReadEndElement(); } } reader.ReadEndElement(); } }
/// <summary> /// Constructor used when the window is created as a consequence of user interaction with the UI</summary> /// <param name="dockPanel">Parent dockpanel</param> /// <param name="content">Dockable content</param> public DockedWindow(DockPanel dockPanel, IDockContent content) { Root = dockPanel; DockedContent = content as TabLayout; if (DockedContent == null) { DockedContent = new TabLayout(Root); DockedContent.Dock(null, content, DockTo.Center); } Content = DockedContent; ShowIcon = (DockedContent.Icon != null && ((Root.IconVisibility & IconVisibility.Header) == IconVisibility.Header)); DockedContent.Closing += Content_Closing; PreviewMouseDown += DockedWindow_PreviewMouseDown; Focused = ((IDockContent)DockedContent).IsFocused; }