Что ж, сегодня я обнаружил, что при установке значений свойств в WPF существует порядок приоритета. Существует множество механизмов для установки значения свойства, и значение свойства зависит от того, как оно было установлено, а не от того, когда оно было установлено.
Установка значения свойства в XAML или с помощью кода всегда будет предшествовать значениям, установленным стилем (а также шаблонами и триггерами). То есть, когда значение свойства задается в XAML или с помощью кода, оно не может быть переопределено установкой стиля.
Чтобы иметь возможность изменять значение свойства с помощью механизма более низкого приоритета, значение должно быть очищено методом DependencyObject.ClearValue
.
В моем примере кода выше был еще один метод, который устанавливал свойство Button.Content
в коде, поэтому стиль больше не мог его изменить. Решением для этого является добавление ClearValue
метода:
Style aStyle = new Style();
Setter bSetter = new Setter();
bSetter.Property = Button.ContentProperty;
bSetter.Value = "Some Text";
aStyle.Setters.Add(bSetter);
aButton.ClearValue(ContentProperty); // <<-- Added this line to clear button content
aButton.Style = aStyle;