From 842429a76e03bef75e6a47543f84aa6e513bbf74 Mon Sep 17 00:00:00 2001 From: Alex Maitland Date: Sun, 16 May 2021 16:27:46 +1000 Subject: [PATCH] WPF Example - Implement DisplayHandler.OnFullscreenModeChange - Use the new CefSharp.Handler.DisplayHandler base class - Update xaml so ChromiumWebBrowser has direct reference to DataContext - When fullscreen create new window and move the browser, move back when exit fullscreen --- .../Handlers/DisplayHandler.cs | 102 ++++++++---------- .../Views/BrowserTabView.xaml | 1 + 2 files changed, 48 insertions(+), 55 deletions(-) diff --git a/CefSharp.Wpf.Example/Handlers/DisplayHandler.cs b/CefSharp.Wpf.Example/Handlers/DisplayHandler.cs index fae391a7fc..c1f4f7162b 100644 --- a/CefSharp.Wpf.Example/Handlers/DisplayHandler.cs +++ b/CefSharp.Wpf.Example/Handlers/DisplayHandler.cs @@ -2,66 +2,58 @@ // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. -using CefSharp.Structs; +using CefSharp.Wpf.Example.Views; using System; -using System.Collections.Generic; -using CursorType = CefSharp.Enums.CursorType; -using Size = CefSharp.Structs.Size; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Media; namespace CefSharp.Wpf.Example.Handlers { - public class DisplayHandler : IDisplayHandler + public class DisplayHandler : CefSharp.Handler.DisplayHandler { - - void IDisplayHandler.OnAddressChanged(IWebBrowser chromiumWebBrowser, AddressChangedEventArgs addressChangedArgs) - { - - } - - bool IDisplayHandler.OnAutoResize(IWebBrowser chromiumWebBrowser, IBrowser browser, Size newSize) - { - return false; - } - - bool IDisplayHandler.OnCursorChange(IWebBrowser chromiumWebBrowser, IBrowser browser, IntPtr cursor, CursorType type, CursorInfo customCursorInfo) - { - return false; - } - - void IDisplayHandler.OnTitleChanged(IWebBrowser chromiumWebBrowser, TitleChangedEventArgs titleChangedArgs) - { - - } - - void IDisplayHandler.OnFaviconUrlChange(IWebBrowser chromiumWebBrowser, IBrowser browser, IList urls) - { - - } - - void IDisplayHandler.OnFullscreenModeChange(IWebBrowser chromiumWebBrowser, IBrowser browser, bool fullscreen) - { - - } - - void IDisplayHandler.OnLoadingProgressChange(IWebBrowser chromiumWebBrowser, IBrowser browser, double progress) - { - - } - - bool IDisplayHandler.OnTooltipChanged(IWebBrowser chromiumWebBrowser, ref string text) - { - //text = "Sample text"; - return false; - } - - void IDisplayHandler.OnStatusMessage(IWebBrowser chromiumWebBrowser, StatusMessageEventArgs statusMessageArgs) - { - - } - - bool IDisplayHandler.OnConsoleMessage(IWebBrowser chromiumWebBrowser, ConsoleMessageEventArgs consoleMessageArgs) - { - return false; + private Grid parent; + private Window fullScreenWindow; + + protected override void OnFullscreenModeChange(IWebBrowser chromiumWebBrowser, IBrowser browser, bool fullscreen) + { + var webBrowser = (ChromiumWebBrowser)chromiumWebBrowser; + + webBrowser.Dispatcher.BeginInvoke((Action)(() => + { + if (fullscreen) + { + //In this example the parent is a Grid, if your parent is a different type + //of control then update this code accordingly. + parent = (Grid)VisualTreeHelper.GetParent(webBrowser); + + //NOTE: If the ChromiumWebBrowser instance doesn't have a direct reference to + //the DataContext in this case the BrowserTabViewModel then your bindings won't + //be updated/might cause issues like the browser reloads the Url when exiting + //fullscreen. + parent.Children.Remove(webBrowser); + + fullScreenWindow = new Window + { + WindowStyle = WindowStyle.None, + WindowState = WindowState.Maximized, + Content = webBrowser + }; + + fullScreenWindow.ShowDialog(); + } + else + { + fullScreenWindow.Content = null; + + parent.Children.Add(webBrowser); + + fullScreenWindow.Close(); + fullScreenWindow = null; + parent = null; + } + })); } } } diff --git a/CefSharp.Wpf.Example/Views/BrowserTabView.xaml b/CefSharp.Wpf.Example/Views/BrowserTabView.xaml index bfc466b2d5..90c1329008 100644 --- a/CefSharp.Wpf.Example/Views/BrowserTabView.xaml +++ b/CefSharp.Wpf.Example/Views/BrowserTabView.xaml @@ -430,6 +430,7 @@ Title="{Binding Title, Mode=OneWayToSource}" AllowDrop="True" WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}" + DataContext="{Binding}" RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}">