2011-11-24 47 views
3

在我的主窗口中,我有一個包含文本框的子控件(用戶控件)。如何處理main(parent)窗口中的子控件文本框的textchange事件。如何處理父控制中的子事件

請爲我提供一些示例代碼,因爲我是新的事件路由。

回答

9

你應該只能夠鉤從父控件的事件。但是,因爲你的父母控制不具備TextChanged事件它自己的,你需要使用附加屬性語法:

<Window ... 
     TextBox.TextChanged="ChildTextBoxChanged"> 

,並在您的代碼隱藏:

private void ChildTextBoxChanged(object sender, TextChangedEventArgs args) 
{ 
    ... 
} 

你不必須將TextBox.TextChanged=專門放在Window上 - 只要是TextBox父級的任何控件,即任何控件都是您的UserControl的父級控件。該活動將依次觸及每位家長,一直到達頂級Window,並且可以在途中隨處處理。

(請注意,如果有人掛鉤的事件,並設置e.Handled = true,該事件不會冒泡過去這一點。有用的知道,如果你有在多層次處理。)

+0

+1 - 有是如何在這裏聲明事件爲例:http://www.stevefenton.co.uk/Content/Blog/Date/201209/Blog/WPF-Bubbling-A-Command - 從-A-兒童瀏覽/ – Fenton

0

在childcontrol創建一個事件 -

private void TextBox_TextChanged(object sender, TextChangedEventArgs args) 
{ 
    if (TextChanged != null) 
    { 
     TextChanged.Invoke(this, args); 
    } 
} 

也爲這個處理器更新XAML - -

<TextBox ... TextChanged="TextBox_TextChanged" ... /> 

public event TextChangedEventHandler TextChanged; 

現在childcontrol添加一個處理文本框的TextChanged事件

現在,您已經在您的childcontrol中創建了一個事件,當Textbox的文本c吊死火災。

現在你只添加一個處理此事件在主窗口 -

private void ChildControl_TextChanged(object sender, TextChangedEventArgs args) 
{ 
    //TODO: Add your further code here. 
} 
1

這也幫助了我。我將在子控件的容器中有一個事件,並在代碼隱藏文件中定義事件。該活動將處理所有兒童的所有文字改變事件。

 <StackPanel TextBoxBase.TextChanged="test_TextChanged" Name="test">          
       <userControl/> 
     </StackPanel> 
相關問題