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

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Windows presentation foundation with - MacDonald M.

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

Book_Pro_WPF-2.mdb 166 19.05.2008 18:09:55
Свойства зависимостей и маршрутизируемые события 167
Поднимающиеся события
На рис. 6.1 показано простое окно, в котором видно, как поднимается событие. Если вы щелкнете на какой-либо части метки, события будут возникать в порядке, перечисленном в окне списка. На рис. 6.1 показан вид этого окна сразу после того, как пользователь щелкнул на изображении внутри метки. Событие MouseUp проходит пять уровней, останавливаясь на специальной форме BubbledLabelClick.
Чтобы получить эту форму, нужно связать изображение и каждый элемент, стоящий над ним в иерархи элементов, с одним и тем же обработчиком события — методом SomethingClicked() .
Ниже показано, как это делается в XAML.
<Window
x:Class="RoutedEvents.BubbledLabelClick" xmlns="http://schemas.microsoft.
com/winfx/2006/xaml/presentation" xmlns:x=
Mhttp://schemas.microsoft.com/winfx/2006/xaml"
Title="BubbledLabelClick"
Height="359" Width="329"
MouseUp="SomethingClicked” >
<Grid Margin="3" MouseUp=MSomethingClicked">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Label Margin="5" Grid.Row="0" HorizontalAlignment="Left" Background="AliceBlue" BorderBrush="Black" BorderThickness="1" MouseUp="SomethingClicked”>
<StackPanel MouseUp="SomethingClicked">
<TextBlock Margin="3"
MouseUp="SomethingClicked”>
Image and text label</TextBlock>
<Image Source="happyface.jpg" Stretch="None"
MouseUp="SomethingClicked” />
<TextBlock Margin="3"
MouseUp="SomethingClicked”>
Courtesy of the StackPanel</ TextBlock>
</StackPanel>
</Label>
<ListBox Grid.Row="1" Margin="5" Name="lstMessages"></ListBox>
<CheckBox Grid.Row="2" Margin="5" Name="chkHandle">
Handle first event</CheckBox>
<Button Grid.Row="3" Margin="5" Padding="3" HorizontalAlignment="Right" Name="cmdClear" Click="cmdClear_Click">Clear List</Button>
</Grid>
</Window>
Метод SomethingClicked() просто проверяет свойства объекта RoutedEventArgs и добавляет сообщение в окно списка:
И BubbledLabelClick [ а [ В fc?frj
Image and picture label
H
Courtesy of the StackPanel
#1:
Sender: System.Windows.Controls.Image So urce: System .Windows.C o n t roi s.I ma g e Original Source: System,Windows,Controlslmage #2:
Sender: System.Windows.Controls.StackPanel So urce: System.Wi ndows.C o n t roi s.I ma g e Original Source: System,Windows,Controlslmage #3:
Sender: System.Windows.Controls.Label So urce: System.Wi ndows.C o n t roi s.I ma g e Original Source: System,Windows,Controlslmage #4:
Sender: System.Windows.Controls.Grid So urce: System .Wi ndows.C o n t roi s.I ma g e Original Source: System,Windows,Controlslmage #5:
Sender: RoutedEvents.BubbledLabelCIick So urce: System .Wi ndows.C o n t roi s.I ma g e Original Source: System,Windows,Controlslmage
1?] Handle first event
I Clear List ]
Рис. 6.1. Щелчок на изображении
06_Pro-WPF2.indd 167
20.05.2008 16:19:56
168 Глава 6
protected int eventCounter = 0;
private void SomethingClicked(object sender, RoutedEventArgs e)
{
eventCounter++;
string message = "#" + eventCounter.ToString() + ":\r\n" +
” Sender: ” + sender.ToString() + "\r\n" +
” Source: ” + e.Source + "\r\n" +
” Original Source: ” + e.OriginalSource; lstMessages.Items.Add(message); e.Handled = (bool)chkHandle.IsChecked;
}
На заметку! С технической точки зрения событие MouseUp снабжает объект MouseButtonEventArgs дополнительной информацией о состоянии мыши на момент возникновения события. Тем не менее, объект MouseButtonEventArgs является наследником MouseEventArgs, который в свою очередь является наследником RoutedventArgs. В итоге мы можем использовать его при объявлении обработчика события (как показано здесь), если нам не нужна дополнительная информация о мыши.
В этом примере есть еще одна деталь. Если вы отметите флажок chkHandle, метод SomethingClicked() присвоит свойству RoutedEventArgs.Handled значение true, в результате чего будет остановлена последовательность поднятия события в момент его возникновения. Поэтому вы увидите в списке только первое событие, как показано на рис. 6.2.
На заметку! Здесь нужна еще одна операция приведения, поскольку свойство CheckBox.IsChecked является булевским значением, которое может принимать значение null (bool? вместо bool). Значение null представляет промежуточное состояние флажка, которое означает, что он и не имеет метки, и не является отмеченным. Эта особенность не используется в данном примере, поэтому проблему решит простое приведение.
Поскольку метод SomethingClicked() обрабатывает событие MouseUp, которое возникает в объекте Window, у вас будет возможность перехватывать щелчки в окне списка и на пустой поверхности окна. Однако событие MouseUp не возникает, когда вы щелкаете на кнопке Clear (она удаляет все записи в окне списка). Это связано с тем, что кнопка включает интересный фрагмент кода, который блокирует событие MouseUp и генерирует событие более высокого уровня — Click. Между тем, флагу Handled присваивается значение true, вследствие чего запрещается дальнейшее продвижение события MouseUp.
Предыдущая << 1 .. 75 76 77 78 79 80 < 81 > 82 83 84 85 86 87 .. 473 >> Следующая