WPF事件类型
WPF通常包括下列五种重要的事件类型
1、生命周期事件:在元素被被初始化,从加载到被删除这个生命周期时发生的。
2、鼠标事件:鼠标的操作事件。
3、键盘事件:键盘的操作事件。
4、手写笔事件:手写设备的操作事件。
5、多点触控事件:一个或多个手指在触控屏幕上的操作事件。
键盘输入
当用户按下键盘上的某个键时,一般会顺序触发下列一系列事件:
- PreviewKeyDown
- KeyDown
- PreviewTextInput
- TextInput
- PreviewKeyUp
- KeyUp
我们以一个简单的程序为例。
<Window x:Class="_09.Keyboard_Input.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="KeyPressEvents" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<DockPanel Margin="5">
<TextBlock Margin="5">请输入:</TextBlock>
<TextBox Focusable="True"
PreviewKeyDown="KeyEvent"
KeyDown="KeyEvent"
PreviewTextInput="TextInput"
PreviewKeyUp="KeyEvent"
KeyUp="KeyEvent"
TextChanged="TextChanged"></TextBox>
</DockPanel>
<ListBox Margin="5" Name="ListMessages" Grid.Row="1"></ListBox>
<Button Margin="5" Content="清除" Grid.Row="2" HorizontalAlignment="Right" Padding="3" Click="Button_Click"></Button>
</Grid>
</Window>
然后分别写TextBox的键盘事件处理程序,最后加一个按钮清除功能。
private void KeyEvent(object sender, KeyEventArgs e)
{
string message="Event:" + e.RoutedEvent + " " + "Key:" + e.Key;
ListMessages.Items.Add(message);
}
private void TextInput(object sender, TextCompositionEventArgs e)
{
string message = "Event:" + e.RoutedEvent + " " + "Text:" + e.Text;
ListMessages.Items.Add(message);
}
private void TextChanged(object sender, TextChangedEventArgs e)
{
string message = "Event:" + e.RoutedEvent;
ListMessages.Items.Add(message);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ListMessages.Items.Clear();
}
实现效果如下,我们在TextBox中键盘输入字母”t“,可以看到键盘事件的顺序: