Вместо использования LogicalChildren мне пришлось вызывать AddLogicalChild. Так что это работает:
public class MyContainer : FrameworkElement
{
public MyContainer()
{
Children = new List<FrameworkElement>();
this.Loaded += new RoutedEventHandler(OnLoaded);
}
void OnLoaded(object sender, RoutedEventArgs e)
{
foreach (FrameworkElement fe in Children)
this.AddLogicalChild(fe);
}
public List<FrameworkElement> Children { get; set; }
}
AddLogicalChild устанавливает логического родителя элемента, это необходимо для поиска NameScope, в котором было зарегистрировано имя "_source". В нашем случае область имен - это Window1.
Примечание. AddLogicalChild не приведет к тому, что LogicalChildren автоматически возвращает наших детей, он только устанавливает Parent. Так что LogicalTreeHelper.GetChildren будет пустой коллекцией. Но нам это здесь не нужно.