Привязка к MyControlColorBrush происходит только один раз при первой загрузке вашей страницы.Ваша привязка к MyObjects[0].Color
вызывает обновление свойства зависимостей, но ничто не указывает остальной части вашего приложения, что MyControlColorBrush также необходимо обновить.
Есть несколько способов добиться этого, самый простой -возможно, просто создать свойство зависимости только для чтения для вашей кисти, которое вы обновляете всякий раз, когда обнаруживаете изменение в свойстве цвета (это похоже на то, как работают свойства Width / ActualWidth).Вашему контролю понадобится DP для цвета:
public Color MyControlColor
{
get { return (Color)GetValue(MyControlColorProperty); }
set { SetValue(MyControlColorProperty, value); }
}
public static readonly DependencyProperty MyControlColorProperty =
DependencyProperty.Register("MyControlColor", typeof(Color), typeof(MyUserControl),
new PropertyMetadata(Colors.Black, OnColorChanged));
И затем DP только для чтения для кисти:
public Brush MyControlColorBrush
{
get { return (Brush)GetValue(MyControlColorBrushProperty); }
protected set { SetValue(MyControlColorBrushPropertyKey, value); }
}
private static readonly DependencyPropertyKey MyControlColorBrushPropertyKey
= DependencyProperty.RegisterReadOnly("MyControlColorBrush", typeof(Brush), typeof(MyUserControl),
new FrameworkPropertyMetadata(Brushes.Black, FrameworkPropertyMetadataOptions.None));
public static readonly DependencyProperty MyControlColorBrushProperty = MyControlColorBrushPropertyKey.DependencyProperty;
И вы будете обновлять кисть всякий раз, когда ваш цвет DPизменения:
private static void OnColorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as MyUserControl).MyControlColorBrush = new SolidColorBrush((Color)e.NewValue);
}
Элементы GUI в вашем пользовательском элементе управления затем привязываются к DP только для чтения, например:
<Grid Background="{Binding Path=MyControlColorBrush, RelativeSource={RelativeSource AncestorType=local:MyUserControl}}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />