WPF 创建自定义控件及自定义事件

1 创建自定义控件及自定义事件

/// <summary>
/// 演示用的自定义控件
/// </summary>
public class ExtButton : Button
{
public ExtButton()
{
base.Click += ExtButton_Click;
}

private void ExtButton_Click(object sender, RoutedEventArgs e)
{
//定义传递参数
// RoutedPropertyChangedEventArgs<Object> args = new RoutedPropertyChangedEventArgs<Object>("1", "2", ControlLoadOverEvent);
RoutedEventArgs args2 = new RoutedEventArgs(ControlLoadOverEvent, this);
//引用自定义路由事件
this.RaiseEvent(args2);

}
/// <summary>
/// 声明路由事件
/// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
/// </summary>
public static readonly RoutedEvent ControlLoadOverEvent = EventManager.RegisterRoutedEvent("ControlLoadOverEvent", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventArgs<Object>), typeof(ExtButton));
/// <summary>
/// 处理各种路由事件的方法
/// </summary>
public event RoutedEventHandler ControlLoadOver
{
//将路由事件添加路由事件处理程序
add { AddHandler(ControlLoadOverEvent, value); }
//从路由事件处理程序中移除路由事件
remove { RemoveHandler(ControlLoadOverEvent, value); }
}

}

2 使用并绑定自定义控件的事件

<!--i为System.Windows.Interactivity引用-->
<ext:ExtButton x:Name="extButton" Content="绑定自定义事件" HorizontalAlignment="Left" Margin="123,10,0,0" VerticalAlignment="Top" Width="95">
<i:Interaction.Triggers>
<i:EventTrigger EventName="ControlLoadOver">
<i:InvokeCommandAction Command="{Binding ButtonLoadOverCommand}" CommandParameter="{Binding ElementName=extButton}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</ext:ExtButton>

3 触发自定义事件后的操作

方式1


public DelegateCommand<Object> ButtonLoadOverCommand { get; set; }
public void ButtonLoadOver(Object obj)
{
//这里的参数为自定义控件对象
ExtButton btn = obj as ExtButton;
if (btn != null)
{
var content = btn.Content;
}
}
方式2


this.extButton.ControlLoadOver += ExtButton_ControlLoadOver;

private void ExtButton_ControlLoadOver(object sender, RoutedEventArgs e)
{
var btn = (Button)e.Source;
var str = btn.Content;
}

转载于:https://www.cnblogs.com/robertyao/p/8093527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值