c# - 如何在 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 中实现这一点的最佳方法。
塔
解决方案
您可以使用客户路由事件。在您的用户控件中,您需要添加路由事件,如下所示:
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
}
推荐阅读
- php - 试图将数据作为对象数组取回,但在 php 中获取数组对象数组
- angular - 将外部数据传递给 Angular-CLI 应用程序
- webpack - ASP.NET Core + Webpack - 未捕获的 ReferenceError:使用 DllReferencePlugin 时未定义供应商
- php - 与 PHP 一起使用时,Imagemagick 转换命令返回错误代码 4
- php - plesk 中的 Codeigniter base_url
- excel - 用户窗体错误:对象“_VBComponent”的方法“属性”失败
- c++ - 为什么使用 make_unique<> 将函数传递给线程会导致 Valgrind 中的内存泄漏?
- java - 发送 json 数据时的空指针
- swift - Swift - 在 TabbarController 中切换选项卡时保持相同的实例化 UIViewController
- wordpress - Wordpress:使用 add_filter 函数将类添加到 div