Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 77 78 79 80 81 82 < 83 > 84 85 86 87 88 89 .. 473 >> Следующая

</StackPanel>
После этого вы сможете обращаться к свойству Tag в вашем коде:
private void DoSomething(object sender, RoutedEventArgs e)
{
object tag = ((FrameworkElement)sender).Tag;
MessageBox.Show((string)tag);
}
Туннельные события
Туннельные события работают точно так же, как и поднимающиеся события, но в обратном направлении. Например, если бы событие MouseUp было туннельным (на самом деле оно таковым не является), то при щелчке на метке событие MouseUp возникло бы сначала в окне, затем в элементе Grid, затем в StackPanel и так далее до тех пор, пока не будет достигнут источник, которым является изображение в метке.
Туннельные события легко распознаются, поскольку они имеют приставку Preview. Более того, WPF обычно определяет поднимающиеся и туннельные события парами. Это означает, что если вы найдете поднимающееся событие MouseUp, то, скорее всего,
Book_ProfWPF-2.mdb 170 19.05.2008 18:09:56
Свойства зависимостей и маршрутизируемые события 171
вы найдете также туннельное событие РгеуіешМоизеир. Туннельное событие всегда возникает перед поднимающимся событием, как показано на рис. 6.3.
Туннельное событие PreviewMouseUp
Поднимающееся событие MouseUp
Рис. 6.3. Туннельные и поднимающиеся события
Для разнообразия скажем, что если вы пометите туннельное событие как обработанное, событие поднятия не возникнет. Это связано с тем, что два события совместно используют один и тот же экземпляр класса RoutedEventArgs.
Туннельные события будут полезны, если вам понадобится выполнить некоторую предварительную обработку, связанную с некоторыми нажатиями клавиш, или отфильтровать некоторые события мыши. На рис. 6.4 показаны результаты проверки туннелирования на примере события PreviewKeyDown. Когда вы нажимаете клавишу, находясь в текстовом поле, событие возникает сначала в этом поле, а затем спускается вниз по иерархии. А если на каком-то этапе вы пометите событие PreviewKeyDown как обработанное, то поднимающееся событие KeyDown не возникнет.
Определение стратегии маршрутизации события
Понятно, что разные стратегии маршрутизации оказывают влияние на то, как вы будете работать с событием. А как определить, какой тип маршрутизации будет использовать данное событие? Туннельные события являются простыми. В соответствии с соглашениями, принятыми в .NET, туннельное событие всегда начинается со слова Preview (как, например, PreviewKeyDown). Однако похожего механизма различения поднимающихся событий от прямых событий не существует. Разработчикам, применяющим WPF, лучше всего искать событие в ссылке на библиотеки классов в справочной системе .NET Framework SDK (в узле .NET Developments. NET Framework SDKS. NET Framework 3.0 DevelopmentSClass Library). Вы увидите информацию Routed Event Information, указывающую на статическое поле события, тип маршрутизации и сигнатуру события.
Эту же информацию можно получить программным способом, проверяя статическое поле для события. Например, свойство ButtonBase.ClickEvent.RoutingStrategy содержит перечислимое значение, которое показывает, какой тип маршрутизации использует событие Click.
Book_Pro_WPF-2.mdb 171
18:09:56
172 Глава 6
?1 Tunneled Key Press [а [ В |м?3и||
Image and te J tt label
Type here: d|
#1:
Sender: RoutedEvents.TunneledKeyPress Source: System.Windows.ControIs.TextBox Original Source: System,Windows.Controls.TextBox Event: Keyboard.PreviewKeyDown #2:
Sender: System.Windows.Controls.Label So u rce: System. Wind ows.C o ntro I s.T ext Box Original Source: System,Windows.Controls.TextBox Event: Keyboard.PreviewKeyDown #3:
Sender: System.Windows.Controls.StackPanel So u rce: System. Wind ows.C o ntro I s.T ext Box Original Source: System,Windows.Controls.TextBox Event: Keyboard.PreviewKeyDown #4:
Sender: System.Windows.Controls.DockPanel So u rce: System. Wind ows.C o ntro I s.T ext B ox Original Source: System.Windows.Controls.TextBox Event: Keyboard,PreviewKeyDown #5:
Sender: System.Windows.Controls.TextBox So u rce: System. Wind ows.C o ntro I s.Text B ox Original Source: System.Windows.Controls.TextBox Event: Keyboard,PreviewKeyDown #6:
Sender: System.Windows.Controls.TextBox So u rce: System. Wind ows.C o ntro I s.Text B ox Original Source: System.Windows.Controls.TextBox Event: Key board, Key Down
В Handle first event
I Clear List I
Рис. 6.4. Туннелирование нажатия клавиши
Совет. Будьте внимательны, помечая туннельное событие как обработанное. В зависимости от способа написания элемента управления, это может привести к тому, что элемент управления не сможет обрабатывать свое собственное событие (связанное с ним поднимающееся событие), чтобы решить некоторую задачу или обновить свое состояние.
События WPF
Теперь, когда вы знаете о том, как работают события WPF, пора приступить к рассмотрению самых разнообразных событий, на которые вы можете реагировать в своем коде. Несмотря на то что каждый элемент имеет широчайший спектр событий, наиболее важные события обычно делятся на четыре описанных ниже категории.
• События времени существования. Эти события возникают, когда элемент инициализируется, загружается или выгружается.
Предыдущая << 1 .. 77 78 79 80 81 82 < 83 > 84 85 86 87 88 89 .. 473 >> Следующая