2014-11-24 23 views
0

我有一個包含ElementHost(System.Windows.Forms.Integration.ElementHost)的DockingManager(Syncfusion.Windows.Forms.Tools.DockingManager)。 ElementHost的子元素是一個自定義的WPF用戶控件(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); 
    } 
} 
相關問題