From f85e8f86c0b1867534f63fedd998220ffaa71ea4 Mon Sep 17 00:00:00 2001 From: mha Date: Wed, 15 Mar 2017 09:41:59 +0100 Subject: [PATCH 1/2] Added FindVisualChildren method to traverse and find control. Changed LayouAccessor constructor to look for TabablzControl instead of just (trying to) convert Layout.Content to TabablzControl. --- Dragablz/Dockablz/LayoutAccessor.cs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Dragablz/Dockablz/LayoutAccessor.cs b/Dragablz/Dockablz/LayoutAccessor.cs index 002538c..736ea2a 100644 --- a/Dragablz/Dockablz/LayoutAccessor.cs +++ b/Dragablz/Dockablz/LayoutAccessor.cs @@ -1,5 +1,8 @@ using System; using System.Collections.Generic; +using System.Linq; +using System.Windows; +using System.Windows.Media; namespace Dragablz.Dockablz { @@ -22,7 +25,27 @@ public LayoutAccessor(Layout layout) if (branch != null) _branchAccessor = new BranchAccessor(branch); else - _tabablzControl = Layout.Content as TabablzControl; + _tabablzControl = FindVisualChildren(Layout).SingleOrDefault(); + } + + private static IEnumerable FindVisualChildren(DependencyObject depObject) where T : DependencyObject + { + if (depObject != null) + { + for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++) + { + var child = VisualTreeHelper.GetChild(depObject, i); + if (child != null && child is T) + { + yield return (T)child; + } + + foreach (T childOfChild in FindVisualChildren(child)) + { + yield return childOfChild; + } + } + } } public Layout Layout From db68108ecb73522f0c7c4fbd233bd964bb320ce6 Mon Sep 17 00:00:00 2001 From: mha Date: Wed, 15 Mar 2017 13:20:48 +0100 Subject: [PATCH 2/2] Removed FindVisualChildren method, and changed to use the VisualTreeDepthFirstTraversal instead. --- Dragablz/Dockablz/LayoutAccessor.cs | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/Dragablz/Dockablz/LayoutAccessor.cs b/Dragablz/Dockablz/LayoutAccessor.cs index 736ea2a..82d4160 100644 --- a/Dragablz/Dockablz/LayoutAccessor.cs +++ b/Dragablz/Dockablz/LayoutAccessor.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Windows; using System.Windows.Media; +using Dragablz.Core; namespace Dragablz.Dockablz { @@ -25,27 +26,7 @@ public LayoutAccessor(Layout layout) if (branch != null) _branchAccessor = new BranchAccessor(branch); else - _tabablzControl = FindVisualChildren(Layout).SingleOrDefault(); - } - - private static IEnumerable FindVisualChildren(DependencyObject depObject) where T : DependencyObject - { - if (depObject != null) - { - for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++) - { - var child = VisualTreeHelper.GetChild(depObject, i); - if (child != null && child is T) - { - yield return (T)child; - } - - foreach (T childOfChild in FindVisualChildren(child)) - { - yield return childOfChild; - } - } - } + _tabablzControl = Layout.VisualTreeDepthFirstTraversal().OfType().FirstOrDefault(); } public Layout Layout