Допустим ItemsSource содержит 5 элементов — соотвественно выведется 5 текстбоксов.
Теперь нужно на один TextBox повесить триггер, чтобы при присвоении ему некоторого значения — другой TextBox становился допустим Disable.
Имена присваивать ( Name ) TextBoxам допустим я динамически могу ( через cпециальное Attach Property ).
Как создать триггер в runtime ?
пробовал так
var t = new MultiDataTrigger();
t.Conditions.Add( new Condition(){ ElementName="t1", Property="Text", Value="1"});
t.Setters.Add( new Setter(){ TargetName="t2", Property="IsEnabled", Value="false"});
listbox.Triggers.Add(t);
не работает
Re: [Wpf] создать триггер в runtime в DataTemplate
А>Допустим ItemsSource содержит 5 элементов — соотвественно выведется 5 текстбоксов.
А>Теперь нужно на один TextBox повесить триггер, чтобы при присвоении ему некоторого значения — другой TextBox становился допустим Disable.
А>Имена присваивать ( Name ) TextBoxам допустим я динамически могу ( через cпециальное Attach Property ).
А>Как создать триггер в runtime ?
Правильно ли я понимаю что тут будет работать только EventTrigger, т.к. Trigger, Multitrigger, DataTrigger, MultiDatatrigger — могут использоваться только в определении Style, DataTemplate и Control.Template — и срабатывают только на момент инициализации ?
Т.е. последние 4 триггера — по сути if( )... для инициализации начальных свойств для отображения ?
Re[2]: [Wpf] создать триггер в runtime в DataTemplate
Здравствуйте, Аноним, Вы писали:
А>Правильно ли я понимаю что тут будет работать только EventTrigger, т.к. Trigger, Multitrigger, DataTrigger, MultiDatatrigger — могут использоваться только в определении Style, DataTemplate и Control.Template — и срабатывают только на момент инициализации ? А>Т.е. последние 4 триггера — по сути if( )... для инициализации начальных свойств для отображения?
Я не интересовался почему так, но да — свойство Triggers у контролов поддерживает только EventTrigger.
Re: [Wpf] создать триггер в runtime в DataTemplate
var template = Application.Current.FindResource("template") as DataTemplate;
var t = new MultiDataTrigger();
t.Conditions.Add( new Condition(){ ElementName="t1", Property="Text", Value="1"});
t.Setters.Add( new Setter(){ TargetName="t2", Property="IsEnabled", Value="false"});
template.Triggers.Add(t);
.....
itemsControl.ItemTemplate = template;
Единственное я не помню, запечатывается ли DataTemplate, если его объявить в разметке или нет, но это уже сами проверите. Разве для MultiDataTrigger надо заполнять коллекцию Conditions, не Bindings?
А>Допустим ItemsSource содержит 5 элементов — соотвественно выведется 5 текстбоксов.
А>Теперь нужно на один TextBox повесить триггер, чтобы при присвоении ему некоторого значения — другой TextBox становился допустим Disable.
А>Имена присваивать ( Name ) TextBoxам допустим я динамически могу ( через cпециальное Attach Property ).
А>Как создать триггер в runtime ?
А>пробовал так А>
А> var t = new MultiDataTrigger();
А> t.Conditions.Add( new Condition(){ ElementName="t1", Property="Text", Value="1"});
А> t.Setters.Add( new Setter(){ TargetName="t2", Property="IsEnabled", Value="false"});
А> listbox.Triggers.Add(t);
А>
А>не работает
Я бы на вашем месте подобную сложную логику(по выставлению различных свойств) делал в коде. Т.е. у вас есть набор неких объектов, у которых есть свойство Text и свойство Enabled(допустим).
Объекты лежат в коллекции, которую вы биндите на ListBox.Шаблон для айтема будет очень простой и единый для всех. А уже в коде делайте со своими объектами что хотите. Не стоит навешивать на XAML
несвойственные ему функции.
Re[2]: [Wpf] создать триггер в runtime в DataTemplate
От:
Аноним
Дата:
02.02.11 04:45
Оценка:
А>>
А>> var t = new MultiDataTrigger();
А>> t.Conditions.Add( new Condition(){ ElementName="t1", Property="Text", Value="1"});
А>> t.Setters.Add( new Setter(){ TargetName="t2", Property="IsEnabled", Value="false"});
А>> listbox.Triggers.Add(t);
А>>
А>>не работает
C>Я бы на вашем месте подобную сложную логику(по выставлению различных свойств) делал в коде. Т.е. у вас есть набор неких объектов, у которых есть свойство Text и свойство Enabled(допустим).
Так я в коде и делаю Приведенный выше фрагмент это разве не код ?
C>Объекты лежат в коллекции, которую вы биндите на ListBox.Шаблон для айтема будет очень простой и единый для всех. А уже в коде делайте со своими объектами что хотите. Не стоит навешивать на XAML C>несвойственные ему функции.
XAML я тут как раз и не использую , см код — это обычный C#.
Возможно имелось ввиду что не использовать триггеры ? Но ситуация такая у меня в базе предполагается структура похожая на описание триггера,
т.е. 6 колонок — sourcename, sourceproperty, sourcevalue, targetname, targetsource, targetvalue.
Собственно можно конечно написать свои триггеры на propertychanged, но я пока хочу попробовать использовать существующие.