У меня есть следующий класс, который определяет присоединенное свойство для установки дочернего поля:
public class MarginSetter
{
public static Thickness GetMargin(DependencyObject obj)
{
return (Thickness)obj.GetValue(MarginProperty);
}
public static void SetMargin(DependencyObject obj, Thickness value)
{
obj.SetValue(MarginProperty, value);
}
public static readonly DependencyProperty MarginProperty =
DependencyProperty.RegisterAttached("Margin", typeof(Thickness), typeof(MarginSetter), new UIPropertyMetadata(new Thickness(), CreateThicknesForChildren));
public static void CreateThicknesForChildren(object sender, DependencyPropertyChangedEventArgs e)
{
var panel = sender as Panel;
if (panel == null) return;
foreach (var child in panel.Children)
{
var fe = child as FrameworkElement;
if (fe == null) continue;
fe.Margin = MarginSetter.GetMargin(panel);
}
}
}
Проблема в том, что при вызове CreateThicknesForChildren дочерние элементы управления не добавляются в родительский элемент.Как исправить этот класс, чтобы он правильно устанавливал поля для всех дочерних элементов управления?
В моем проекте никакие элементы управления динамически не добавляются в родительский элемент управления, все они создаются в файле xaml.Кстати, дизайнер работает правильно и как-то правильно устанавливает поля для всех дочерних элементов.