【问题标题】:catch OnVisibilityChanged events捕捉 OnVisibilityChanged 事件
【发布时间】:2014-11-25 07:18:43
【问题描述】:

我有一个包含 ElementHost (System.Windows.Forms.Integration.ElementHost) 的 DockingManager (Syncfusion.Windows.Forms.Tools.DockingManager)。 ElementHost 的子元素是一个自定义 WPF 用户控件(elementHost 看到它有一个 FrameworkElement)。

我想在标签打开时处理一个事件。我尝试了很多东西(OnVisibilityChanged、IsHitTestVisibleChanged、DockVisibilityChanging、VisibleChanged)。 WPF userControl 上的 OnVisibilityChanged 似乎有效,但似乎仅在第一次打开选项卡时触发。

我做了很多尝试和错误,但似乎没有任何效果。请给我一些帮助。

【问题讨论】:

标签: c# .net wpf syncfusion


【解决方案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 以查看它是 rollin 还是 rollout。

我的解决方案:

 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);
   }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多