demo 1:
using System.Windows;
namespace WpfApplication10
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyClass myClass = new MyClass() { Name = "111", Age = 12 };
myClass.AddPrintEventHandler(this, new RoutedEventHandler(Print));
myClass.AddPrintEventHandler(this, new RoutedEventHandler(Print2));
this.RaiseEvent(new RoutedEventArgs(MyClass.OnPrintEvent, myClass));
}
public void Print(object o, RoutedEventArgs e)
{
MyClass m = e.OriginalSource as MyClass;
MessageBox.Show(m.Name + System.Environment.NewLine + m.Age);
}
public void Print2(object o, RoutedEventArgs e)
{
MyClass m = e.OriginalSource as MyClass;
MessageBox.Show(m.Name + " " + m.Age);
}
}
}
using System.Windows;
namespace WpfApplication10
{
class MyClass
{
public static readonly RoutedEvent OnPrintEvent =
EventManager.RegisterRoutedEvent("OnPrint", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyClass));
public void AddPrintEventHandler(UIElement o, RoutedEventHandler h)
{
o.AddHandler(OnPrintEvent, h);
}
public void RemovePrintEventHandler(UIElement o, RoutedEventHandler h)
{
o.RemoveHandler(OnPrintEvent, h);
}
public int Age { get; set; }
public string Name { get; set; }
}
}
demo 2:
<UserControl x:Class="WpfControlLibrary1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Height="107" Width="148">
<Button Content="Button" Height="23" Click="button1_Click" HorizontalAlignment="Left" Margin="37,38,0,0" Name="button1" VerticalAlignment="Top" Width="75"/>
</Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;
namespace WpfControlLibrary1
{
/// <summary>
/// Interaction logic for UserControl1.xaml
/// </summary>
public partial class UserControl1 : UserControl
{
public static readonly RoutedEvent ButtonClickEvent = EventManager.RegisterRoutedEvent("ButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(UserControl1));
public event RoutedEventHandler ButtonClick
{
add { this.AddHandler(ButtonClickEvent, value); }
remove { this.RemoveHandler(ButtonClickEvent, value); }
}
public UserControl1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
RoutedEventArgs routede = new RoutedEventArgs(ButtonClickEvent, this.button1); //设置button1为OriginalSource
this.RaiseEvent(routede);
}
}
}
<my:UserControl1 HorizontalAlignment="Left" Margin="126,71,0,0" Name="userControl11" VerticalAlignment="Top" ButtonClick="userControl11_ButtonClick" />
<my:UserControl2 HorizontalAlignment="Left" Margin="293,71,0,0" Name="userControl21" VerticalAlignment="Top" Height="107" Width="165" />
private void userControl11_ButtonClick(object sender, RoutedEventArgs e)
{
userControl21.textBox1.Text = string.Empty;
}