2011-12-21 6 views
0

MainWindowに、私の子コントロールの1つからルーテッドイベントとして発生しているイベントがあります。 MainWindowには、ルーティングされたファイアを捕捉するためのAddHandler呼び出しがあります。オンザフライで作成された子要素からルーティングされたイベントを使用するにはどうすればよいですか?

私は別の子要素から同じイベントを発生したいと思いますが、私はメインウィンドウでのAddHandlerを使用しようとすると、この要素(menuItemには)のように、その場で作成されます:私は取得

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は即座に作成されているので、そのMainWindowは親として登録されていないので、バブリングされたイベントはそれを作成していない可能性がありますか? – joepetrakovich

+0

あなたのMenuItemがVisualTreeの一部であれば、それはすべて問題ありません。また、デザインタイムやランタイム中に作成されたものであれば問題ありません。 私は上記の私の投稿を編集して、これが役立つことを願っています... – SvenG

関連する問題