private static BranchResult Branch(Orientation orientation, double proportion, bool makeSecond, DataTemplate branchTemplate, TabablzControl?newSibling, object existingContent, Action <Branch> applier) { var branchItem = new Branch { Orientation = orientation }; var newContent = new ContentControl { Content = newSibling ?? new object(), ContentTemplate = branchTemplate, }; if (!makeSecond) { branchItem.FirstItem = existingContent; branchItem.SecondItem = newContent; } else { branchItem.FirstItem = newContent; branchItem.SecondItem = existingContent; } branchItem.SetCurrentValue(Dockablz.Branch.FirstItemLengthProperty, new GridLength(proportion, GridUnitType.Star)); branchItem.SetCurrentValue(Dockablz.Branch.SecondItemLengthProperty, new GridLength(1 - proportion, GridUnitType.Star)); applier(branchItem); newContent.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.Loaded); var newTabablzControl = newContent.VisualTreeDepthFirstTraversal().OfType <TabablzControl>().FirstOrDefault(); if (newTabablzControl != null) { return(new BranchResult(branchItem, newTabablzControl)); } //let#s be kinf and give WPF an extra change to gen the controls newContent.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.Background); newTabablzControl = newContent.VisualTreeDepthFirstTraversal().OfType <TabablzControl>().FirstOrDefault(); if (newTabablzControl == null) { throw new ApplicationException("New TabablzControl was not generated inside branch."); } return(new BranchResult(branchItem, newTabablzControl)); }
private static BranchResult Branch(Orientation orientation, double proportion, bool makeSecond, DataTemplate branchTemplate, object existingContent, Action<Branch> applier) { var branchItem = new Branch { Orientation = orientation }; var newContent = new ContentControl { Content = new object(), ContentTemplate = branchTemplate, }; if (!makeSecond) { branchItem.FirstItem = existingContent; branchItem.SecondItem = newContent; } else { branchItem.FirstItem = newContent; branchItem.SecondItem = existingContent; } branchItem.SetCurrentValue(Dockablz.Branch.FirstItemLengthProperty, new GridLength(proportion, GridUnitType.Star)); branchItem.SetCurrentValue(Dockablz.Branch.SecondItemLengthProperty, new GridLength(1-proportion, GridUnitType.Star)); applier(branchItem); newContent.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.Loaded); var newTabablzControl = newContent.VisualTreeDepthFirstTraversal().OfType<TabablzControl>().FirstOrDefault(); if (newTabablzControl == null) throw new ApplicationException("New TabablzControl was not generated inside branch."); return new BranchResult(branchItem, newTabablzControl); }