2012-01-03 30 views
3

如果我有一个用户控件如何在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" /> 

回答

3

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

例如,对于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消费者真正关心的行为。 此致敬礼,

相关问题