2014-11-24 2 views
0

ElementHost (System.Windows.Forms.Integration.ElementHost)가 포함 된 DockingManager (Syncfusion.Windows.Forms.Tools.DockingManager)가 있습니다. ElementHost의 하위 요소는 사용자 지정 WPF userControl입니다 (elementHost에는 FrameworkElement가 있음을 알 수 있음).catch OnVisibilityChanged 이벤트

탭을 열 때 이벤트를 처리하려고합니다. 나는 많은 것을 시도했다. (OnVisibilityChanged, IsHitTestVisibleChanged, DockVisibilityChanging, VisibleChanged). WPF userControl에서 OnVisibilityChanged가 작동하는 것처럼 보였지만 탭을 처음 열 때만 트리거 된 것 같습니다.

많은 시행 착오를했지만 아무 것도 작동하지 않는 것 같습니다. 제발 좀 도와주세요.

답변

1

나는 지쳤다. 나는 바보 그러나 급속한 일했다 : 나는 각 처리기에 중단 점을 넣어 가지고

  dockingManager.DockControlActivated += handler1; 
      dockingManager.DockControlDeactivated += handler2; 
      dockingManager.DockMenuClick += handler3; 
      dockingManager.DockStateChanged+=handler4; 
      dockingManager.DockStateChanging += handler5; 
      dockingManager.DockVisibilityChanged += handler6; 
      dockingManager.DockVisibilityChanging += handler7; 
      dockingManager.NewDockStateBeginLoad += handler8; 
      dockingManager.NewDockStateEndLoad += handler9; 
      dockingManager.DockAllow += handler10; 
      dockingManager.ControlRestored += handler11; 
      dockingManager.ControlMinimized += handler12; 
      dockingManager.ControlMaximizing += handler13; 
      dockingManager.ControlMaximized += handler14; 
      dockingManager.AutoHideAnimationStop += handler15; 
      dockingManager.AutoHideAnimationStart += handler16; 

} 

private void handler16(object sender, AutoHideAnimationEventArgs arg) 
{ 
    int i=0;i++; 
} 

private void handler15(object sender, AutoHideAnimationEventArgs arg) 
{ 
    int i=0;i++; 
} 

private void handler14(object sender, ControlMaximizedEventArgs args) 
{ 
    int i=0;i++; 
} 
... 

을 나는 AutoHideAnimationStop 또는 AutoHideAnimationStart 트릭을 할 수 있다는 것을 발견했다. 코드 (예 : dockingManager.ActivateControl (ElementHost);)로 탭을 열어도 트리거됩니다. 또한 arg가 롤인인지 롤아웃인지 확인할 수 있습니다.

내 솔루션 :

private void OnLoadCompleted(object _sender) 
{ 
    dockingManager.AutoHideAnimationStop += handler15; 

} 
private void handler15(object _sender, AutoHideAnimationEventArgs _arg) 
{ 
    MyUserControl childControl = (MyUserControl)MyElementHost.Child; 
    if (MyElementHost!= null && childControl != null && MyElementHost.Visible) 
    { 
    childControl.OnVisibilityChanged(_sender, _arg); 
    } 
}