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); }