private static List<VisualTreeObject> GetChildren(DependencyObject o) {
List<VisualTreeObject> children = new List<VisualTreeObject>();
UIThreadHelper.Instance.Invoke(() => {
int childrenCount = VisualTreeHelper.GetChildrenCount(o);
if (childrenCount > 0) {
for (int i = 0; i < childrenCount; i++) {
var child = VisualTreeHelper.GetChild(o, i);
// Skip tracks that change visible/hidden on different machines.
// depending if touch device such as trackpad is present.
var fe = child as FrameworkElement;
if (fe != null && !string.IsNullOrEmpty(fe.Name) && fe.Name.EqualsOrdinal("PART_Track") && fe.DataContext == null) {
continue;
}
children.Add(Create(child));
}
}
});
return children;
}
}