C# 如何为UserControl内部的控件外部分配事件处理程序?

C# 如何为UserControl内部的控件外部分配事件处理程序?,c#,.net,wpf,events,xaml,C#,.net,Wpf,Events,Xaml,如果我有一个用户控件 <UserControl x:Class="UserInterface.AControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <Button Conte

如果我有一个用户控件

<UserControl
    x:Class="UserInterface.AControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Button
            Content="Set"
            Name="setButton" />
    </Grid>
</UserControl>
我可以用类似的东西吗

        <my:AControl
              setButton.Click="setButton_Click" />

您不能真正做到这一点,但您可以在自定义用户控件(AControl)中,从它“SetButtonClicked”中公开一个公共事件,然后订阅它。这假设SetButton存在于AControl上

例如,AControl的C#代码将变成

public class AControl : UserControl
{ 
    public event EventHandler<EventArgs> SetButtonClicked;

    public AControl ()
    {
        InitializeComponent();
        this.setButton.Click += (s,e) => OnSetButtonClicked;
    }
    protected virtual void OnSetButtonClicked()
    {
        var handler = SetButtonClicked;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
}
公共类AControl:UserControl
{ 
公共事件事件处理程序SetButtonClicked;
公共控制()
{
初始化组件();
this.setButton.Click+=(s,e)=>OnSetButtonClicked;
}
受保护的虚拟void OnSetButtonClicked()
{
var handler=SetButtonClicked;
if(处理程序!=null)
{
处理程序(此,EventArgs.Empty);
}
}
}
在Xaml中,您可以订阅以下内容

<my:AControl SetButtonClick="setbutton_Clicked"/>

编辑:我想问一下,您在这里想要实现什么目标。如果您希望处理AControl之外的一些其他行为,那么可以将该事件称为其他事件?例如,您是想通知某人某个按钮已单击,还是某个操作已完成?通过封装AControl内部单击的自定义行为,您可以公开AControl消费者真正关心的行为。 致以最良好的祝愿

<my:AControl SetButtonClick="setbutton_Clicked"/>