В настоящее время я кодирую программу с пользовательским интерфейсом WPF, и у меня есть кнопка, которая либо закрывает, либо отменяет, в зависимости от того, были ли на странице внесены какие-либо изменения. Для этого я хочу использовать триггер (обернутый в стиль) на кнопке, чтобы, когда свойство зависимости HasChanges истинно, кнопка изменилась с «Закрыть» на «Отменить». Пока моя программа отображает «Close» в качестве текста кнопки, но ничего не происходит, когда мое свойство зависимости HasChanges становится истинным. Страница WPF пишется на VB.Net, а не на XAML.
Пока у меня есть:
Private Sub SetUpMyButton()
Me.MyButton.Style = Me.GetMyButtonStyle()
End Sub
Private Function GetMyButtonStyle() As Style
Dim hasChangesTrigger as New Trigger
hasChangesTrigger.Property = CustomControl.HasChangesProperty
hasChangesTrigger.Value = True
hasChangesTrigger.Setters.Add(New Setter(Button.ContentProperty, "Cancel"))
Dim hasChangesStyle as New Style
hasChangesStyle.TargetType = GetType(Button)
hasChangesStyle.Setters.Add(New Setter(Button.ContentProperty, "Close"))
hasChangesStyle.Triggers.Add(hasChangesTrigger)
hasChangesStyle.Seal()
Return hasChangesStyle
End Function
Любая помощь приветствуется.





Я не понимаю, почему вы делаете это в коде, а не в XAML, но я думаю, что ваш триггер просто не знает, где искать настраиваемое свойство зависимостей. С вашим кодом он будет искать свойство HasChanges на самой кнопке. Это предназначено? Возможно, вам нужно установить свойство TriggerSourceName. Или, возможно, будет проще использовать другой тип триггера (например, DataTrigger).
Я не уверен, почему он решил сделать это в коде, но вы можете не знать, что код XAML нельзя запутать, на чем настаивают многие работодатели, особенно при создании коммерческих библиотек управляющих классов. Это связано с тем, что значительная часть значения элемента управления находится в его шаблонах и стилях элементов управления, и которые, если оставить их в XAML, могут быть легко украдены парнями, использующими такие инструменты, как BAML viewer и т. д. Нет никакого инструмента обфускации, который мог бы скрыть XAML / BAML и отсюда и причина поместить это в код. Но у OP может быть другая причина.