【问题标题】: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);
}
}