Динамически устанавливаемый обработчик событий с использованием DataTrigger - PullRequest
7 голосов
/ 13 марта 2012

у меня есть несколько элементов управления, которые мне нужно прикрепить обработчик событий для их Событие PreviewMouseLeftButtonDown только при выполнении определенного условия.

Я разработал стиль для своих элементов управления с помощью устройства сбора данных, я проверил его привязки и опробовал его с помощью обычного установщика свойств для свойства BorderThickness, просто чтобы убедиться, что устройство обработки данных работает , (Это делает ..)

как я могу применить свой datatrigger для присоединения обработчика событий, когда условие datatrigger выполняется с использованием установщика событий таким же образом, как и обычный установщик свойств?

что-то вроде:

     <Style TargetType="{x:Type ItemsControl}">                              
        <Style.Triggers>
            <DataTrigger Binding="{Binding Turn}" Value="True">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>
            </DataTrigger>                            
        </Style.Triggers>
     </Style>

эта разметка генерирует следующее исключение в строке установщика событий:

    'Set property 'System.Windows.EventSetter.Event' threw an exception.' 

Внутреннее исключение:

       {"Value cannot be null.\r\nParameter name: value"}

1 Ответ

12 голосов
/ 13 марта 2012

К сожалению, согласно MSDN doc под примечаниями:

Обратите внимание, что только Style.Setters поддерживает объекты EventSetter . Триггеры (TriggerBase и производные классы) не поддерживают EventSetter

В этом случае DataTrigger является производным от TriggerBase, поэтому вы не можете использовать его для динамической установки обработчиков событий. Обходной путь, о котором я могу подумать сейчас, может заключаться в динамическом переключении стилей на основе значения Turn.

...