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()); } }
protected virtual void RegisterSourceKeyboardInputSink(IKeyboardInputSink sourceKeyboardInputSink) { IKeyboardInputSink keyboardInputSink = this; if (sourceKeyboardInputSink != null) { keyboardInputSink.KeyboardInputSite = sourceKeyboardInputSink.RegisterKeyboardInputSink(this); } }
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); } }
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(); }
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(); }