Почему я не могу установить сеттер внутри триггера событий - PullRequest
5 голосов
/ 03 марта 2011

Я пытался добавить визуальную обратную связь для списка, поддерживающего перетаскивание. Похоже, я должен быть в состоянии добавить некоторые сеттеры в EventSetter и все готово. Однако установщики событий не поддерживают установщики. Действительно ли мне нужно создавать раскадровку для реализации этого поведения?

Что Microsoft для этого рациональна?

   <Style TargetType="{x:Type ListBox}">
        <Style.Triggers>
             <EventTrigger RoutedEvent="DragEnter">
                 <!--WHy Can't i Add seters here? e.g.
                <Setter Property="ForeColor" Value="Red"> 
                -->
            </EventTrigger>
        </Style.Triggers>
    </Style>

Ответы [ 4 ]

7 голосов
/ 03 марта 2011

Установщик не только устанавливает свойство в ответ на изменение состояния, но также восстанавливает его предыдущее значение при изменении состояния. Нет никаких «изменений назад» с триггерами событий, поэтому использование сеттеров с ними было бы все равно, что поместить что-то в стек, который никогда не вытолкнется.

Я думаю, что гораздо лучший вопрос в данных обстоятельствах: «Почему нет свойства IsDragOver

3 голосов
/ 03 марта 2011

Вы могли бы, может быть, попробовать что-то вроде этого? Это сорта псевдокод, у меня нет VS, чтобы проверить его, но он должен работать. Используя отражатель, вы должны иметь возможность провести обратный инжиниринг SetterAction и заставить этот Setter работать практически точно так же, теоретически.

<TextBox Text="ListBox" >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="DragEnter" >
            <behavior:SetterAction Property="ListBox.ForeColor" Value="Red"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

public class SetterAction : TargetedTriggerAction<FrameworkElement>
{       
    public DependencyProperty Property { get; set; }
    public Object Value { get; set; }   


    protected override void Invoke(object parameter)
    {                 
        AssociatedObject.SetValue(Property, Value);       
    }
}
1 голос
/ 03 марта 2011

Да, это отстой. Та же проблема здесь EventTrigger с сеттером в WPF? они закончили с использованием раскадровки. Это не намного хуже, чем сеттер.

1 голос
/ 03 марта 2011

Нельзя помещать сеттеры в триггеры событий.Вот только как это.Вам не нужна раскадровка, если вы не против сделать какой-то код за работой.Тонны других с такой же проблемой, так что не расстраивайтесь.

проверить Как открыть всплывающее окно WPF при нажатии на другой элемент управления, используя только разметку XAML?

...