2012-01-03 67 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消費者真正關心的行爲。 此致敬禮,

相關問題