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"/>