Я работаю с формой, где некоторые ComboBox могут быть созданы и удалены программно.
Когда они создаются, некоторые триггеры, которые нацелены на них, создаются и применяются к кнопке:
Dictionary<ComboBox, DataTrigger> triggers = new Dictionary<ComboBox, DataTrigger>();
private void CreateTrigger(ComboBox box)
{
Style s = new Style(typeof(Button), MyButton.Style);
foreach(TriggerBase aTrigger in MyButton.Style.Triggers)
s.Triggers.Add(aTrigger);
DataTrigger t = new DataTrigger
{
Binding = new Binding("SelectedItem") { Source = box },
Value = null
};
t.Setters.Add(new Setter(Button.IsEnabledProperty, false));
s.Triggers.Add(t);
triggers.Add(box, t);
MyButton.Style = s;
}
Пока все хорошо *.,,проблема в том, что делать, когда ComboBox удаляется из окна.Мне нужно удалить триггер из стиля кнопки, так как я больше не хочу, чтобы ComboBox влиял на его поведение.Я попробовал наиболее очевидный вариант:
private void RemoveTrigger(ComboBox box)
{
Style s = new Style(typeof(Button), MyButton.Style);
foreach(TriggerBase aTrigger in MyButton.Style)
if(aTrigger != triggers[box]) s.Triggers.Add(aTrigger);
triggers.Remove(box);
MyButton.Style = s;
}
Но, похоже, это не сработает - если триггер удален, пока он активен, то кнопка остается отключенной.
У меня былоПредполагается, что кнопка будет переоценивать свой стиль всякий раз, когда ему дается новый.кажется, что это происходит при добавлении триггера, но не при его удалении - что мне здесь не хватает?
РЕДАКТИРОВАТЬ: Изменен код для добавления / удаления триггеров в соответствии с рекомендациями в Комментарий HB .Тем не менее, рассматриваемая проблема остается.
РЕДАКТИРОВАТЬ 2: * В конце концов, возможно, не так хорошо - я попытался добавить дополнительный ComboBox (и триггер) и обнаружил, что добавлениевторой триггер, кажется, сломает первый.Используя этот код, работает только последний добавленный триггер.Должен ли я думать о триггерах FrameworkElement как о коллекции с однократной записью и искать другой способ достижения такого поведения?