如果我有一个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(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);
}
}
}
在Xaml中,您将按以下方式订阅
<my:AControl SetButtonClick="setbutton_Clicked"/>
编辑:我想问一下这是什么,但是您想要在这里实现.如果您希望处理AControl之外的其他行为,那么可以将该事件称为其他事件吗?例如,您是否只想通知某人某个按钮被单击或操作已完成?通过将自定义行为封装为AControl内部的单击,您可以暴露AControl使用者真正关心的行为.
最好的祝福,