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;
}

posted @ 2017-12-23 15:30  willamyao  阅读(1406)  评论(0编辑  收藏  举报