2014-11-24 61 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); 
    } 
}