2012-05-02 17 views
0

私は、2Dチャート上のファイルからデータをプロットするWPFアプリケーションを開発しました。 ユーザーは、マウスを使用してズームおよびパンすることができます。 複数の図面をWPF TabControlの異なるタブに読み込むことができます。描画自体は、TabItem内のグリッドによって保持されます。WPF TabControlの選択されたTabItemへのイベントの再接続

ファイルを読み込んで対応するチャートを生成するたびに、チャートを保持するグリッドにマウスイベントを接続しています。

マウスイベントが最後にロードされたチャートに接続され、他のTabItemを選択すると、コントロール(ズーム/パン)が表示されません。

私は戻ってきたTabItemのグリッドにマウスイベントを再接続する方法が見つかりませんでした。

私はどんな手がかりもありがとう。

モティ

答えて

0

たぶん、あなたは、グリッドのMouseEnterイベントにハンドラを接続することもできます。その後、あなたはmouseeventsを接続することができます。グリッドの作成時に

grid.MouseEnter="Grid_MouseEnter" 

のMouseEnterハンドラ:

private void Grid_MouseEnter(object sender, MouseEventArgs e) 
{ 
    var grid = sender as Grid; 
    if (grid == null) 
     return; 

    grid.MouseWheel += a1_MouseWheel; 
} 

マウスホイールハンドラ

private void a1_MouseWheel(object sender, MouseWheelEventArgs e) 
{ 
    var grid = sender as Grid; 
    System.Diagnostics.Debug.WriteLine(grid.Name + " " + e.Delta); 
} 

私はあなたがグリッドのもMouseEventからハンドラを削除すると思いますか!?

+0

問題は、誰にイベントを再接続するかわからないことです。私はイベントハンドラを切断しませんが、(新鮮なTabItem内の)他のイベントにそれらを接続すると直前のものから切り離します。 – user1370434

+0

問題を再現できません。 WpfApplicationを作成し、コンテンツにボタンとTabControlを配置し、Click EventHandlerでボタンを配線し、Click EventHandler内でグリッドを作成し、Grid.MouseWheelイベントをEventHandlerに配線し、GridをTabControlに追加して表示しましたDebug.WriteLine MouseWheel EventHandler内のデバッグコード。私は新しいTabItemsを追加して、さらにTabItemに戻っている場合、それは動作します。 – csteinmueller

+0

あなたのアプリケーションが同じ条件を再現するかどうかはわかりません。私の場合、TabControlがあります。各TabItemで、私はグリッドを定義し、それにMouseイベントを接続します。新しく作成されたすべてのTabItemは、イベントにうまく反応します(グリッド内のグラフを拡大/縮小する)。しかし、既に存在するTabItemを選択すると、イベントが切断されていることがわかりました。イベントは定義された最後のTabItemにのみ接続されます。 – user1370434

関連する問題