Как заставить прикрепленное имущество реагировать на изменение коллекции детей? - PullRequest
1 голос
/ 03 апреля 2011

У меня есть следующий класс, который определяет присоединенное свойство для установки дочернего поля:

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.Кстати, дизайнер работает правильно и как-то правильно устанавливает поля для всех дочерних элементов.

1 Ответ

2 голосов
/ 03 апреля 2011

Как насчет регистрации в событии Loaded панели?это не поможет, если вы добавите элементы динамически позже, но для основных 95% это будет работать:

public static void CreateThicknesForChildren(object sender, DependencyPropertyChangedEventArgs e)
{
    var panel = sender as Panel;
    panel.Loaded += ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...