void WinFormsControl_MouseUp(object sender, swf.MouseEventArgs e)
        {
            Control.CaptureMouse();

            MouseEventArgs eto = e.ToEto(WinFormsControl);

            swi.MouseButton changed = eto.ToWpf().ChangedButton;
            var             args    = new swi.MouseButtonEventArgs(swi.InputManager.Current.PrimaryMouseDevice, Environment.TickCount, changed)
            {
                RoutedEvent = swi.Mouse.MouseUpEvent,
                Source      = Control
            };

            Control.ReleaseMouseCapture();

            Control.RaiseEvent(args);
        }
        void WinFormsControl_MouseDown(object sender, swf.MouseEventArgs e)
        {
            // Contrary to most WPF controls, the WindowsFormsHost class seems
            // to prevent correct mouse event data from being obtained (e.g.
            // which buttons were pressed, and at what location). The solution
            // is capturing the mouse long enough to build args...
            Control.CaptureMouse();

            MouseEventArgs eto = e.ToEto(WinFormsControl);

            swi.MouseButton changed = eto.ToWpf().ChangedButton;
            var             args    = new swi.MouseButtonEventArgs(swi.InputManager.Current.PrimaryMouseDevice, Environment.TickCount, changed)
            {
                RoutedEvent = swi.Mouse.MouseDownEvent,
                Source      = Control
            };

            // ...but releasing it before continuing, in case the mouse event in
            // question is one that shouldn't hold onto the mouse.
            Control.ReleaseMouseCapture();

            Control.RaiseEvent(args);
        }