2011-12-21 1 views
0

내 자식 컨트롤 중 하나에서 라우트 된 이벤트로 시작되는 이벤트가 MainWindow에 있습니다. MainWindow에는 라우팅 된 화재를 잡기위한 AddHandler 호출이 있습니다.즉석에서 작성된 하위 요소에서 라우트 된 이벤트를 어떻게 사용합니까?

나는 다른 자식 요소에서이 같은 이벤트를 해고하고 싶지만,이 요소 (A는 menuItem가) 내가 좋아하는, MainWindow를에 AddHandler에 사용하려고 그래서 즉석에서 작성되는 :

this.AddHandler(MyMenuItem.EditExtensionsEvent, new RoutedEventHandler(this.EditExtensions)); 

내가 얻을 MyMenuItem이 아직 존재하지 않기 때문에 널 (null) 인수 예외.

누구나 라우트 된 이벤트를 계속 사용할 수있는 방법을 알고 있습니까?

답변

1

MyMenuItem이 응용 프로그램의 네임 스페이스에 없거나 EditExtensionsEvent가 MyMenuItem 클래스의 정적 RoutedEvent가 아닌 것으로 가정합니다.

은 다음과 비슷한 모습이 될 것입니다

public class MyMenuItem 
{ 
public static readonly RoutedEvent EditExtensionsEvent 
.. 
} 

http://msdn.microsoft.com/en-us/library/ms752288.aspx

볼이 당신이 여기에 표시 한대로 작동합니다 이런 식으로 선언하면

편집 : 나는 ' 기존 이벤트에 등록하여 EditExtensionsEvent가 제대로 작동하는지 확인하는 것이 좋습니다.

public MainWindow() 
{ 
    .. 
    this.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(this.MenuItemClick)); 
} 

private void MenuItemClick(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show("Clicked"); 
} 
+0

null 인수 예외가 수정되었지만 어떤 이유로 내 이벤트가 부모로부터 해고되지 않았습니다. 나는 여기서 어디로 가야할지 모르겠다. – joepetrakovich

+0

내 menuItem이 즉석에서 만들어지기 때문에 그 메인 윈도우가 부모로 등록되지 않아서 버블 링 된 이벤트가 만들어지지 않을 수 있습니까? – joepetrakovich

+0

MenuItem이 VisualTree의 일부인 경우 모든 것이 잘되고 디자인 타임이나 런타임 중에 만들어진 경우 문제가되지 않습니다. 나는 위의 내 게시물을 편집하여이 도움이되기를 바랍니다 ... – SvenG