本例依赖文章 https://blog.csdn.net/Vblegend_2013/article/details/81634020
用户控件代码
/// <summary>
/// 声明路由事件
/// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
/// </summary>
public static readonly RoutedEvent OnToolTipShowEvent = EventManager.RegisterRoutedEvent("OnToolTipShow", RoutingStrategy.Bubble, typeof(MyEventArgs), typeof(MyUserControl));
/// <summary>
/// 处理各种路由事件的方法
/// </summary>
public event RoutedEventHandler OnToolTipShow
{
//将路由事件添加路由事件处理程序
add { AddHandler(OnToolTipShowEvent, value,false); }
//从路由事件处理程序中移除路由事件
remove { RemoveHandler(OnToolTipShowEvent, value); }
}
MyEventArgs 必须继承 RoutedEventArgs
public class MyEventArgs: RoutedEventArgs
{
...你的事件参数
}
用户控件中触发事件
var param = new MyEventArgs();
param.RoutedEvent = OnToolTipShowEvent;
param.Source = this;
this.RaiseEvent(param);
WPF绑定
<MyUserControl>
<i:Interaction.Triggers>
<i:EventTrigger EventName="OnToolTipShow">
<cmd:EventCommand Command="{Binding OnToolTipShow}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</MyUserControl>
MVVM
public IDefaultCommand OnToolTipShow
{
get
{
return new CallCommand<MyEventArgs>((s, e) =>
{
}, (s, o) => { return true; });
}
}