2011-11-24 3 views
3

주 창에는 텍스트 상자가 포함 된 자식 컨트롤 (사용자 정의 컨트롤)이 있습니다. 메인 (부모) 윈도우에서 자식 컨트롤의 텍스트 상자의 텍스트 변경 이벤트를 처리하려면 어떻게해야합니까?부모 컨트롤에서 자식 이벤트를 처리하는 방법

이벤트 라우팅에 익숙하지 않으므로 코드 예제를 제공해주십시오.

답변

9

당신은 부모 컨트롤에서 이벤트를 후크 할 수 있어야한다.

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

하고 코드 숨김에서 : 당신의 부모 컨트롤 자체의 TextChanged 이벤트를 가지고 있지 않기 때문에, 당신은 첨부 재산권 구문을 사용해야합니다

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

당신은하지 않습니다 WindowTextBox.TextChanged=을 넣어야합니다. 즉 TextBox의 부모 인 컨트롤 즉, UserControl의 부모 인 모든 컨트롤을 넣어야합니다. 이 행사는 각 학부모에게 차례로, 최상위 레벨 인 Window까지 펼쳐질 것이며 길을 따라 어디에서나 처리 될 수 있습니다.

은 (누군가가 이벤트를 후크 및 e.Handled = true를 설정하면 여러 수준에서 핸들러가있는 경우, 이벤트가 그 시점 과거 없습니다 거품. 유용한 알고 않습니다.) 이것은 또한 나에게 도움이

+0

하나는 - 여기에 이벤트를 선언하는 방법에 대한 예제가있다 : http://www.stevefenton.co.uk/Content/Blog/Date/201209/Blog/WPF-Bubbling-A-Command -From-A-Child-View / – 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 이벤트에 대한 처리기를 추가

이제 Textbox의 textc가 실행될 때 발생하는 이벤트를 자식 컨트롤에 만들었습니다 교수형.

지금 만 MainWindow를이 이벤트에 대한 처리기를 추가합니다 -

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

. 자식 컨트롤의 컨테이너에 이벤트가 있고 코드 숨김 파일에 이벤트가 정의됩니다. 이 이벤트는 모든 자식에 대해 변경된 모든 텍스트를 처리합니다.

 <StackPanel TextBoxBase.TextChanged="test_TextChanged" Name="test">          
       <userControl/> 
     </StackPanel>