Я думаю, что мне здесь не хватает чего-то очень фундаментального.
Я создал UserControl
с DependencyProperty
, определенным так:
public static DependencyProperty SpinnerColourProperty = DependencyProperty.Register("SpinnerColour", typeof(Color), typeof(LoadingControl), new PropertyMetadata(Colors.Black));
public Color SpinnerColour
{
get
{
return (Color)GetValue(SpinnerColourProperty);
}
set
{
SetColour(value);
SetValue(SpinnerColourProperty, value);
}
}
(Да, я предпочитаю британско-английский ... так что подайте в суд на меня: P)
Метод SetColour
, как и ожидалось, меняет внешний вид элемента управления.
Если в моем коде я напишу customControl1.SpinnerColour = Colors.Red
, тогда элемент управления правильно изменит цвет как свойства, так и визуального эффекта, который применяется через установщик. (Я даже могу наблюдать это изменение, если поиграю со свойством в конструкторе Visual Studio!)
Однако, если я применю привязку данных к этому свойству, а затем изменю элемент, к которому оно привязано, значение свойства изменится, но метод установки никогда не будет вызван, и фактическое отображение никогда не изменится.
Например, если я определю кнопку и свой элемент управления:
<my:MyControl x:Name="myControl1" SpinnerColour="{Binding ElementName=button1, Path=Background.Color, Mode=TwoWay}" />
<Button Content="Button" Height="23" Name="button1" Click="button1_Click" />
И событие Click
меняет цвет фона кнопок следующим образом:
private void button1_Click(object sender, RoutedEventArgs e)
{
button1.Background = new SolidColorBrush(Colors.Red);
}
Тогда, если я проверю свойство SpinnerColour
с помощью отладчика, оно будет красным. Однако, как я написал, сеттер никогда не вызывается, и фактический элемент управления никогда не меняет свой цвет.
Что я делаю не так?