В этой главе мы узнаем, как обрабатывать пользовательский ввод в приложениях Silverlight. Silverlight предоставляет мощный API, с помощью которого приложение может получать ввод с различных устройств, таких как мышь, клавиатура, сенсорный экран и т. Д.
Типы ввода
Существует несколько разных способов, которыми пользователь может взаимодействовать с вашим приложением. Самый очевидный способ — с помощью мыши. Silverlight предлагает события для отслеживания —
- Движения мыши
- Нажатие кнопки и
- Колесо деятельности
Конечно, есть и клавиатура, а Silverlight также поддерживает сенсорный ввод. Если вы знакомы с поддержкой касания в Windows, вы знаете, что сенсорный ввод может быть представлен либо как события низкого уровня, предоставляющие подробную информацию, либо он может быть обобщен в события высокого уровня, называемые жестами.
События мыши
Давайте начнем с рассмотрения событий ввода мыши, предлагаемых Silverlight. Некоторые события связаны с движением указателя мыши.
-
Событие MouseMove возникает каждый раз, когда указатель перемещается, когда он находится над элементами, к которым вы прикрепили обработчик.
-
Вы также получаете события MouseEnter и MouseLeave, чтобы уведомить вас о том, когда мышь перемещается в элемент и выходит из него.
Событие MouseMove возникает каждый раз, когда указатель перемещается, когда он находится над элементами, к которым вы прикрепили обработчик.
Вы также получаете события MouseEnter и MouseLeave, чтобы уведомить вас о том, когда мышь перемещается в элемент и выходит из него.
Ниже приведен код XAML, в который добавлены эллипс и TextBlock.
<UserControl x:Class="MouseInput.MainPage" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable = "d" d:DesignHeight = "300" d:DesignWidth = "400"> <Grid x:Name = "LayoutRoot" Background = "White"> <TextBlock x:Name = "mouseText" FontSize = "40" VerticalAlignment = "Top" Height = "76" Margin = "0,10,0,0" /> <Ellipse Name = "myEllipse" Width = "320" Height = "150" HorizontalAlignment = "Left" VerticalAlignment = "Top" Margin = "27,103,0,0" Stroke = "Black" StrokeThickness = "10" Fill = "#00FF0000" MouseEnter = "myEllipse_MouseEnter" MouseLeave = "myEllipse_MouseLeave" MouseMove = "myEllipse_MouseMove" /> </Grid> </UserControl>
Ниже приведена реализация различных событий ввода мыши .
using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace MouseInput { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void myEllipse_MouseEnter(object sender, MouseEventArgs e) { mouseText.Text = "Mouse Enter"; myEllipse.Stroke = new SolidColorBrush(Colors.Blue); } private void myEllipse_MouseLeave(object sender, MouseEventArgs e) { mouseText.Text = "Mouse Leave"; myEllipse.Stroke = new SolidColorBrush(Colors.Black); } private void myEllipse_MouseMove(object sender, MouseEventArgs e) { mouseText.Text = "Mouse Move: " + e.GetPosition(myEllipse); } } }
Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий вывод.
Когда мышь войдет в эллипс, вы увидите изменение цвета и координат.
Когда мышь покидает эллипс, она покажет сообщение « мышь уходит » и изменит цвет по умолчанию.
клавиатура
Самым простым способом ввода текстовых данных в приложение для пользователя является клавиатура, если она доступна. Помните, что не у всех мобильных устройств есть клавиатура, кроме ноутбуков и настольных компьютеров.
-
Silverlight предлагает два простых события для ввода с клавиатуры: KeyUp и KeyDown .
-
Оба они передают KeyEventArgs в обработчик, а свойство Key указывает, какая клавиша была нажата.
-
В приведенном ниже примере некоторые из ввода с клавиатуры обрабатываются.
-
В следующем примере определяется обработчик события Click и обработчик события KeyDown .
Silverlight предлагает два простых события для ввода с клавиатуры: KeyUp и KeyDown .
Оба они передают KeyEventArgs в обработчик, а свойство Key указывает, какая клавиша была нажата.
В приведенном ниже примере некоторые из ввода с клавиатуры обрабатываются.
В следующем примере определяется обработчик события Click и обработчик события KeyDown .
Ниже приведен код XAML, в который добавляются различные элементы пользовательского интерфейса.
<UserControl x:Class = "KeyboardInput.MainPage" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable = "d" d:DesignHeight = "300" d:DesignWidth = "400"> <Grid x:Name = "LayoutRoot" Background = "White"> <StackPanel Orientation = "Horizontal" KeyDown = "OnTextInputKeyDown"> <TextBox Width = "400" Height = "30" Margin = "10"/> <Button Click = "OnTextInputButtonClick" Content = "Open" Margin = "10" Width = "50" Height = "30"/> </StackPanel> </Grid> </UserControl>
Ниже приведен код C #, в котором обрабатываются различные события клавиатуры и нажатия.
using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace KeyboardInput { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void OnTextInputKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.O) { handle(); e.Handled = true; } } private void OnTextInputButtonClick(object sender, RoutedEventArgs e) { handle(); //e.Handled = true; } public void handle() { MessageBox.Show("Do you want to open a file?"); } } }
Когда приведенный выше код скомпилирован и выполнен, вы увидите следующее:
Если вы нажмете кнопку « Открыть» или щелкните в текстовом поле и нажмете « ОК» , то появится такое же сообщение.
Мы рекомендуем вам выполнить приведенный выше пример для лучшего понимания.