首页 > 解决方案 > 如何在 wpf 的用户控件中注册事件处理程序

问题描述

我有一个代表员工的用户控件。xaml 是一个字符图标的图像,并且有一个员工姓名的文本框。当在文本框中输入文本时,会引发 Textchanged 事件并调用此事件处理程序:

private void employeeNameChangedEventHandler(object sender, TextChangedEventArgs args)
        {
            _employeeName = employeeName.Text;
        }

这是用户控件中的一个属性,因此可以检索名称:

 public string EmployeeName
        {
            get { return _employeeName; }
        }

在 MainWindow.xaml.cs 我想听用户控件中的 TextChanged 事件处理程序。

我已经阅读了有关代表的内容,并且对 Unity 的事件有一些经验,但只是不确定在 wpf 中实现这一点的最佳方法。

标签: c#wpfevents

解决方案


您可以使用客户路由事件。在您的用户控件中,您需要添加路由事件,如下所示:

    public static readonly RoutedEvent NameChangedEvent = EventManager.RegisterRoutedEvent

               ("NameChanged", RoutingStrategy.Bubble, typeof(EventHandler<RoutedEventArgs>), typeof(UserControl1));

        public event RoutedEventHandler NameChanged
        {

            add { this.AddHandler(NameChangedEvent, value); }

            remove { this.RemoveHandler(NameChangedEvent, value); }

        }

并且在文本框的 textchanged 事件中,您应该提出您的客户路由事件。

 private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            this.RaiseEvent(new RoutedEventArgs(UserControl1.NameChangedEvent));
        }

现在,您只需要在需要用户控件的地方添加订阅您的客户路由事件,就像您使用 textchanged 一样。

<local:UserControl1 x:Name="uc" NameChanged="NameChanged"/>

而 NameChanged 是这样的

 private void NameChanged(object sender, RoutedEventArgs e)
        {
            //when you input one character in you usercontrol, you will get here
        }

推荐阅读