Как подключить событие к элементу управления, который входит динамически как часть DataTemplate? - PullRequest
1 голос
/ 23 августа 2010

У меня есть ListBox, который использует DataTemplateSelector, чтобы динамически решить, что Шаблон для использования в зависимости от типа элемента в списке. Теперь я хочу зацепить события, которые могут быть вызваны элементами управления в DataTemplate. Например, если в одном из шаблонов есть флажок, я хочу, чтобы приложение использовало контроль, чтобы быть уведомленным, когда флажок установлен. Если другой шаблон имеет кнопка внутри нее, я хочу получать уведомления при нажатии кнопки.

Кроме того, поскольку это ListBox, многие элементы могут иметь один и тот же шаблон. Так Мне понадобится какой-то RoutedEventArgs, чтобы я мог подняться из OriginalSource, чтобы получить некоторая контекстная информация для обработки события.

Моим решением было использовать MouseLeftButtonUp. Это отлично работает для TextBlocks, но похоже, что для элементов управления CheckBox и Button установлено значение true, поэтому событие не всплывает. Как я могу решить эти события, чтобы я мог назначить им обработчики в моем вызывающем приложении?

(Кроме того, Silverlight на самом деле не поддерживает DataTemplateSelector, поэтому я следовал этому примеру для его реализации)

1 Ответ

0 голосов
/ 23 августа 2010

Если вы определяете шаблоны в Xaml для пользовательского элемента управления, в котором размещаются ваши обработчики событий, тогда вы просто должны иметь возможность назначать обработчики событий в Xaml.

Однако в конкретном сценарии, который вы наметитеВы также можете прослушивать событие MouseLeftButtonUp с помощью метода AddHandler: -

 myListBox.AddHandler(UIElement.MouseLeftButtonUpEvent, myListBox_MouseLeftButtonUp, true);

...

private void myListBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    //e.OriginalSource available for your inspection
}

Примечание, используя AddHandler и передавая trueв третьем параметре вы получите событие независимо от того, было ли оно обработано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...