如何从外部为UserControl内部的控件分配事件处理程序
本文关键字:控件 分配 事件处理 程序 内部 从外部 UserControl | 更新日期: 2023-09-27 18:19:15
如果我有一个UserControl
<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>
如何在外部分配一个事件处理程序为setButton
时使用此控件?
<UserControl
xmlns:my="clr-namespace:UserInterface"
x:Class="UserInterface.AnotherControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<my:AControl />
</Grid>
</UserControl>
我可以用这样的东西吗?
<my:AControl
setButton.Click="setButton_Click" />
你不能真正做到这一点,但你可以做的是在你的自定义UserControl(控件)中,从它"SetButtonClicked"中暴露一个公共事件,然后订阅它。假设网管上存在SetButton。
例如,控件的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);
}
}
}
,在Xaml中,您将订阅如下
<my:AControl SetButtonClick="setbutton_Clicked"/>
编辑:我会问你在这里想要实现什么。如果你想处理一些额外的行为之外的控件,那么也许调用事件别的东西?例如,您只是想通知某人单击了按钮,或者操作完成了吗?通过在控件中封装您的自定义点击行为,您可以公开控件的消费者真正关心的行为。致以最诚挚的问候