WPF窗体事件响应

来源:互联网 发布:mac 命令行显示路径 编辑:程序博客网 时间:2024/05/16 00:36

    /*记录我学习事件的过程*/

   为降低代码的耦合性,通常将事件“上抛”,由父窗体处理事件;具体的思路是:

  以下为自己写的Demo,实现的是:当按下左Shift、左Ctrl切换颜色

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace EventTest{    /// <summary>    /// UserControl1.xaml 的交互逻辑    /// </summary>    public partial class UserControl1 : UserControl    {        public UserControl1()        {            InitializeComponent();                    }        public event EventHandler<KeyEventArgs> OnAltKeyUp;        private void UserControl_KeyUp(object sender, KeyEventArgs e)        {            if(OnAltKeyUp!=null)                OnAltKeyUp(sender, e);        }     }}

***************************************************

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace EventTest{    /// <summary>    /// UserControl2.xaml 的交互逻辑    /// </summary>    public partial class UserControl2 : UserControl    {        public UserControl2()        {            InitializeComponent();        }        public event EventHandler<KeyEventArgs> OnCtrlKeyUp;        private void UserControl_KeyUp(object sender, KeyEventArgs e)        {            if (OnCtrlKeyUp != null)                OnCtrlKeyUp(sender, e);        }    }}

/*以下为Window的设计界面和处理方法*/

    <Grid>        <Grid.ColumnDefinitions>            <ColumnDefinition Width="*"/>            <ColumnDefinition Width="*"/>        </Grid.ColumnDefinitions>        <EventTest:UserControl1 x:Name="User1" Grid.Column="0"/>        <EventTest:UserControl2 x:Name="User2" Grid.Column="1"/>    </Grid>

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace EventTest{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();           // this.EscEvent += new KeyEventHandler(Window_KeyUp);            User1.OnAltKeyUp += Window_KeyUp;            User2.OnCtrlKeyUp += Window_KeyUp;        }        private event KeyEventHandler EscEvent;        private void Window_KeyUp(object sender, KeyEventArgs e)        {                           OnKeyUp(sender, e);        }        private void OnKeyUp(object sender,KeyEventArgs e)        {            //if (e.Key == Key.Escape)            //{            //    User1.Visibility = User1.Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;            //    User2.Visibility = User1.Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;            //}            if (e.Key == Key.LeftShift)//User1            {                User1.Background = new SolidColorBrush(Colors.Yellow);                User2.Background = new SolidColorBrush(Colors.Green);            }            else if (e.Key==Key.LeftCtrl)//User2            {                User1.Background = new SolidColorBrush(Colors.Red);                User2.Background = new SolidColorBrush(Colors.Yellow);            }        }    }}

运行的效果如下

   初始界面

左Shift键:


左Ctrl键:




    

0 0