我有一个自定义控件,我们称之为uc_mycontrol,在这个控件内,我有一个按钮,我们将其命名为btn_demo。 因此,在我的 mainwindow.xaml 中,我有一个 uc_mycontrol 的实例。 我想使用 btn_demo 单击事件处理程序,但我想在 mainwindow 的类中声明事件处理程序,而不是在 uc_mycontrol 的类中声明事件处理程序。我知道处理点击事件的最佳方法是在 uc_mycontrol 中定义它,但我特别想在主窗口上处理此事件
总之,我有一个自定义控件,上面有一个按钮。我已经在窗口上实例化了自定义控件。我想在窗口内处理按钮单击事件,而不是在自定义控件内处理。
您可以在
uc_mycontrol
中定义自定义事件。然后,在 bt_demo click
事件中,验证自定义委托是否有订阅者。如果是,则触发自定义事件。
public partial class uc_mycontrol : UserControl
{
public delegate void MyControlClickEvent(object sender, RoutedEventArgs e);
public event MyControlClickEvent OnControlClickEvent;
public uc_mycontrol()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.OnControlClickEvent?.Invoke(sender, e);// sender = the button
//this.OnControlClickEvent?.Invoke(this, e); // sender = this control
}
}
将您的自定义控件添加到
MainWindow.xaml
并订阅自定义事件。
<Window x:Class="StackOverFlowWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StackOverFlowWPF"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<local:uc_mycontrol HorizontalAlignment="Left" Height="293" Margin="89,64,0,0" VerticalAlignment="Top" Width="547"
OnControlClickEvent="uc_mycontrol_OnControlClickEvent">
</local:uc_mycontrol>
</Grid>
在您的
MainWindow.xaml.cs
中,您将拥有:
private void uc_mycontrol_OnControlClickEvent(object sender, RoutedEventArgs e)
{
MessageBox.Show("Message");
}