Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

События

Читайте также:
  1. Events. События и коммуникации.
  2. II. Фагоцитоз и последующие события
  3. Библия об великих событиях в Аравии - Страж Бога в Думе и переселение мусульман из Мекки в Медину и их битва при Бадре
  4. Битва за Москву 1941-1942: события, герои, источники победы.
  5. Богов активизируют люди и события
  6. Видения, сны и сверхъестественные события
  7. Военные действия 1648—1649 гг.: основные события

В WPF события ведут себя точно так же, как в любой другой библиотеке классов, входящей в состав.NET. Каждый объект предоставляет набор событий, на которые можно подписаться, определив соответствующий делегат. В WPF имеется дополнительный механизм маршрутизации событий, который позволяет им распространяться вверх по дереву элементов. Существует три вида маршрутизации событий: прямая, всплытие (bubbling) и туннелирование (tunneling). Прямые события – это простые события, возникающие от одиночного источника, они почти идентичны стандартным событиям.NET с тем отличием, что регистрируются в системе маршрутизации событий WPF. Некоторые средства платформы (например, триггеры) требуют, чтобы событие было явно зарегистрировано. Всплывающие и туннельные события – две стороны одной медали: туннельные события продвигаются от корня дерева к целевому элементу, а всплывающие – в обратном направлении. Обычно эти два вида событий встречаются попарно, причем туннельная версия имеет префикс Preview. Большинство событий ввода (от клавиатуры, от мыши и от пера) имеют как туннельную, так и всплывающую версии, например: MouseRightButtonDown и PreviewMouseRightButtonDown, соответственно.

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

<Window...
PreviewMouseRightButtonDown=’WindowPreviewRightButtonDown’
MouseRightButtonDown=’WindowRightButtonDown’
>
<GroupBox
PreviewMouseRightButtonDown=’GroupBoxPreviewRightButtonDown’
MouseRightButtonDown=’GroupBoxRightButtonDown’
>
<StackPanel>
<Button>One</Button>
<Button
PreviewMouseRightButtonDown=’ButtonTwoPreviewRightButtonDown’
MouseRightButtonDown=’ButtonTwoRightButtonDown’
>
Two
</Button>
</StackPanel>
</GroupBox>
</Window>

В обработчике каждого события мы можем вывести его имя:

void ButtonTwoPreviewRightButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine(«ButtonTwo PreviewRightButtonDown»);
}

void ButtonTwoRightButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine(«ButtonTwo RightButtonDown»);
}

void GroupBoxPreviewRightButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine(«GroupBox PreviewRightButtonDown»);
}

void GroupBoxRightButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine(«GroupBox RightButtonDown»);
}

void WindowPreviewRightButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine(«Window PreviewRightButtonDown»);
}

void WindowRightButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine(«Window RightButtonDown»);
}

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

1. Window PreviewMouseRightButtonDown.

2. Window PreviewMouseRightButtonDown.

3. GroupBox PreviewMouseRightButtonDown.

4. Button PreviewMouseRightButtonDown.

5. Button MouseRightButtonDown.

6. GroupBox MouseRightButtonDown.

7. Window MouseRightButtonDown.

Туннелирование и всплытие прекрасно работают для таких встроенных в каждый элемент управления событий, как события мыши. Однако туннелироваться и всплывать может любое событие. Чтобы обеспечить и туннелирование, и всплытие, WPF поддерживает присоединенные события. Подобно тому, как система свойств позволяет присоединять свойства к любому элементу, мы можем присоединить к любому элементу и обработчик событий.

Если мы хотим получать извещения о нажатии любой кнопки в окне, достаточно просто вызвать метод AddHandler. У каждого события в WPF имеется свойство типа RoutedEvent, которое во время исполнения ссылается на объект источник. Чтобы присоединить обработчик, мы передаем методу AddHandler объект RoutedEvent и делегат, который необходимо вызвать:

this.AddHandler(Button.ClickEvent, (RoutedEventHandler)delegate
{
MessageBox.Show(«Clicked»);
});

WPF расширяет базовую модель событий.NET, добавляя систему маршрутизации событий, которая учитывает композицию элементов. Все остальные средства обработки действий построены на базе этой модели маршрутизации.


Дата добавления: 2015-08-13; просмотров: 73 | Нарушение авторских прав


Читайте в этой же книге: Устанавливаем стили для элементов управления | Определение свойств зависимости | Шаг 2. Рефакторинг кода разметки указателя цвета | Набор для практики | Задача 4. | Свойство, которое возвращает или задает тип, для которого предназначен данный стиль. | Шаг 2. Создание пользовательского элемента управления | Шаг 5. Использование Custom Control | Шаг 1. Инкапсуляция UI в User Control | Композиция элементов |
<== предыдущая страница | следующая страница ==>
Слабая связь| Команды

mybiblioteka.su - 2015-2024 год. (0.009 сек.)