从父窗口处理自定义控件事件[重复]

问题描述 投票:0回答:1

我有一个自定义控件,我们称之为uc_mycontrol,在这个控件内,我有一个按钮,我们将其命名为btn_demo。 因此,在我的 mainwindow.xaml 中,我有一个 uc_mycontrol 的实例。 我想使用 btn_demo 单击事件处理程序,但我想在 mainwindow 的类中声明事件处理程序,而不是在 uc_mycontrol 的类中声明事件处理程序。我知道处理点击事件的最佳方法是在 uc_mycontrol 中定义它,但我特别想在主窗口上处理此事件

总之,我有一个自定义控件,上面有一个按钮。我已经在窗口上实例化了自定义控件。我想在窗口内处理按钮单击事件,而不是在自定义控件内处理。

c# wpf
1个回答
1
投票

您可以在

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.