Пример #1
0
        protected virtual void OnCurrentHwndSourceChanged(DependencyPropertyChangedEventArgs e)
        {
            Initialize();

            // Unregister the old keyboard input site.
            IKeyboardInputSite keyboardInputSite = ((IKeyboardInputSink)this).KeyboardInputSite;

            if (keyboardInputSite != null)
            {
                ((IKeyboardInputSink)this).KeyboardInputSite = null;
                keyboardInputSite.Unregister();
            }

            // Register the new keyboard input site with the containing
            // HwndSource.
            IKeyboardInputSink sink = CurrentHwndSource;

            if (sink != null)
            {
                ((IKeyboardInputSink)this).KeyboardInputSite = sink.RegisterKeyboardInputSink(this);
            }

            // Set the owner of the RedirectedWindow to our CurrentHwndSource.
            // This keeps the RedirectedWindow on top of the HwndSource.
            if (CurrentHwndSource != null)
            {
                HWND hwndSource = new HWND(CurrentHwndSource.Handle);
                HWND hwndRoot   = hwndSource; // User32NativeMethods.GetAncestor(hwndSource, GA.ROOT); // need to get the top-level window?
                NativeMethods.SetWindowLongPtr(
                    _redirectedWindow.Handle,
                    GWL.HWNDPARENT,
                    hwndRoot.DangerousGetHandle());
            }
        }
Пример #2
0
        private void OnSourceChanged(object sender, SourceChangedEventArgs e)
        {
            IKeyboardInputSite keyboardInputSite = ((IKeyboardInputSink)this).KeyboardInputSite;

            if (keyboardInputSite != null)
            {
                ((IKeyboardInputSink)this).KeyboardInputSite = null;
                keyboardInputSite.Unregister();
            }
            IKeyboardInputSink sink = source as IKeyboardInputSink;

            if (sink != null)
            {
                ((IKeyboardInputSink)this).KeyboardInputSite = sink.RegisterKeyboardInputSink(this);
            }

            source = e.NewSource;

            if (!isBuildingWindow)
            {
                isBuildingWindow = true;
                HwndSource parent = (HwndSource)e.NewSource;

                try
                {
                    if (hWnd.Handle == IntPtr.Zero)
                    {
                        hWnd = new HandleRef(this, ((INativeHandleContract)contract.Contract).GetHandle());

                        LayoutUpdated    += OnLayoutUpdated;
                        IsEnabledChanged += OnEnabledChanged;
                        IsVisibleChanged += OnVisibleChanged;

                        PostMessage(new HandleRef(null, Handle), 0x9005, parent.Handle, IntPtr.Zero);
                        PostMessage(new HandleRef(null, Handle), 0x9002, IntPtr.Zero, IntPtr.Zero);
                        InvalidateMeasure();
                    }
                }
                finally
                {
                    isBuildingWindow = false;
                }
            }
            else
            {
                Debug.Assert(false);
            }
        }
Пример #3
0
        private void OnSourceChanged(object sender, SourceChangedEventArgs e)
        {
            IKeyboardInputSite keyboardInputSite = ((IKeyboardInputSink)this).KeyboardInputSite;

            if (keyboardInputSite != null)
            {
                if (this._fTrusted.Value)
                {
                    new UIPermission(PermissionState.Unrestricted).Assert();
                }
                try
                {
                    ((IKeyboardInputSink)this).KeyboardInputSite = null;
                    keyboardInputSite.Unregister();
                }
                finally
                {
                    if (this._fTrusted.Value)
                    {
                        CodeAccessPermission.RevertAssert();
                    }
                }
            }
            IKeyboardInputSink keyboardInputSink = PresentationSource.CriticalFromVisual(this, false) as IKeyboardInputSink;

            if (keyboardInputSink != null)
            {
                if (this._fTrusted.Value)
                {
                    new UIPermission(PermissionState.Unrestricted).Assert();
                }
                try
                {
                    ((IKeyboardInputSink)this).KeyboardInputSite = keyboardInputSink.RegisterKeyboardInputSink(this);
                }
                finally
                {
                    if (this._fTrusted.Value)
                    {
                        CodeAccessPermission.RevertAssert();
                    }
                }
            }
            this.BuildOrReparentWindow();
        }
Пример #4
0
        private void OnSourceChanged(object sender, SourceChangedEventArgs e)
        {
            // Remove ourselves as an IKeyboardInputSinks child of our previous
            // containing window.
            IKeyboardInputSite keyboardInputSite = ((IKeyboardInputSink)this).KeyboardInputSite;

            if (keyboardInputSite != null)
            {
                // Derived classes that implement IKeyboardInputSink should support setting it to null.
                ((IKeyboardInputSink)this).KeyboardInputSite = null;

                keyboardInputSite.Unregister();
            }

            // Add ourselves as an IKeyboardInputSinks child of our containing window.
            IKeyboardInputSink source = PresentationSource.CriticalFromVisual(this, false /* enable2DTo3DTransition */) as IKeyboardInputSink;

            if (source != null)
            {
                ((IKeyboardInputSink)this).KeyboardInputSite = source.RegisterKeyboardInputSink(this);
            }

            BuildOrReparentWindow();
        }