
I think I've come up with a simple sample snippet that can be done in a simple WPF project:
Let's say I have the following setup:
<Grid>
<docking:DockSite x:Name="MainDockSite">
<docking:Workspace>
<docking:TabbedMdiHost>
<docking:TabbedMdiContainer>
<docking:ToolWindow Title="My Tool Window" x:Name="MyToolWindow"/>
</docking:TabbedMdiContainer>
</docking:TabbedMdiHost>
</docking:Workspace>
</docking:DockSite>
</Grid>
And in my code behind, I'm just logged a few statements to see what events are fired:
MainDockSite.WindowActivated += (sender, args) => Trace.WriteLine("WindowActivated: " + args.Window.Name);
MainDockSite.WindowsStateChanged += (sender, args) => Trace.WriteLine("WindowsStateChanged: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.WindowRegistered += (sender, args) => Trace.WriteLine("WindowRegistered: " + args.Window.Name);
MainDockSite.WindowUnregistered += (sender, args) => Trace.WriteLine("WindowUnregistered: " + args.Window.Name);
MainDockSite.WindowsOpened += (sender, args) => Trace.WriteLine("WindowsOpened: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.WindowsOpening += (sender, args) => Trace.WriteLine("WindowsOpening: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.WindowsDragged += (sender, args) => Trace.WriteLine("WindowsDragged: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.WindowsDragging += (sender, args) => Trace.WriteLine("WindowsDragging: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.WindowsClosed += (sender, args) => Trace.WriteLine("WindowsClosed: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.WindowsClosing += (sender, args) => Trace.WriteLine("WindowsClosing: " + String.Join(",", args.Windows.Select(w => w.Name)));
MainDockSite.FloatingWindowOpening += (sender, args) => Trace.WriteLine("FloatingWindowOpening: " + args.DockHost);
When I run this, I:
- Float the tool window via it's context menu (FloatingWindowOpening and WindowStateChanged event fires)
- Dock the tool window via it's context menu (no event gets fired)
So I think my question is two-fold based on those two steps:
- How do I get a handle to the window that was floated from the FloatingWindowOpening event?
- How do I detect when the floating window is docked?