zoukankan      html  css  js  c++  java
  • 4、路由事件 RoutedEvent

    路由事件的类型:具体参考https://www.cnblogs.com/jellochen/p/3475754.html

    • Tunnel隧道方式:路由事件使用隧道策略,以便事件实例通过树向下路由(从根到源元素)。
    • Bubble冒泡方式:路由事件使用冒泡策略,以便事件实例通过树向上路由(从事件元素到根)。
    • Direct直接方式:路由事件不通过元素树路由,仅在源元素发生,与.net事件类似,但其支持其他路由事件功能

    当用户按下一个键,就会触发一系列的事件,这里按顺序依次列出公共的事件:

    • PreviewKeyDown事件:隧道事件,按下一个键触发
    • KeyDown事件:冒泡事件,按下一个键触发
    • PreviewTextInput事件:隧道事件,当按键完成并且元素正在接受文本输入时发生。对于一些像Ctrl、Shift等不会产生文本输入的键不会触发该事件
    • TextInput事件:冒泡事件,当按键完成并且元素正在接受文本输入时发生。对于一些像Ctrl、Shift等不会产生文本输入的键不会触发该事件
    • PreviewKeyUp事件:隧道事件,当释放一个键时发生
    • KeyUp事件:冒泡事件,当释放一个键时发生

     上面是一些公共的事件,不同控件可能还有一些自己特有的事件,为了不冲突,还会将上面的导致冲突的事件挂起。例如TextBox控件拥有TextChanged事件,而挂起了TextInpute事件(不会触发)。因此,建议用Preview开头的事件

    一般按键都会触发Preview开头的事件,除了特殊按键,如空格键、方向键、Alt键等非输入键。

    案例:通过PreviewTextInput判断输入是否合法,不合法则阻止输入

    XAML代码:

    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <DockPanel Grid.Row="0">
                <TextBlock Text="请输入数字:" Margin="3"/>
                <TextBox PreviewTextInput="TextBox_PreviewTextInput" />             
            </DockPanel>
            <ListBox x:Name="listBox" Grid.Row="1" Margin="5"/>
            <Button x:Name="Clear" Content="清除" Grid.Row="2" HorizontalAlignment="Right" Margin="5" Padding="3" Click="Clear_Click"/>
    </Grid>

    CS代码:

            private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
            {
                string message = "Event:" + e.RoutedEvent + " " + "Text:" + e.Text;
                this.listBox.Items.Add(message);
                long num = 0;
                if (!long.TryParse(e.Text, out num))
                {
                    MessageBox.Show(e.Text + "键不是数字");
                    e.Handled = true;
                }         
            }
            private void Clear_Click(object sender, RoutedEventArgs e)
            {
                this.listBox.Items.Clear();
            }

    关于TextBlock和Label的比较,参考https://www.cnblogs.com/candyzhmm/p/6937290.html

  • 相关阅读:
    centos6 vps部署rails
    初始设置ubuntu 16.04 Vps部署rails
    自己买的书籍
    linux mint 18.2 install erlang
    Bunder: What does :require => nil in Gemfile mean?
    javascript箭头函数
    SharpGL学习笔记(一) 平台构建与Opengl的hello World
    动力学仿真引擎ODE的学习笔记,C#演示(一)
    设计模式之 面向对象的养猪厂的故事,C#演示(二)
    设计模式之 面向对象的养猪厂的故事,C#演示(一)
  • 原文地址:https://www.cnblogs.com/xixixing/p/10965305.html
Copyright © 2011-2022 走看看