Skip to content

Commit 842429a

Browse files
committed
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
1 parent e0dab5a commit 842429a

File tree

2 files changed

+48
-55
lines changed

2 files changed

+48
-55
lines changed

CefSharp.Wpf.Example/Handlers/DisplayHandler.cs

Lines changed: 47 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,58 @@
22
//
33
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
44

5-
using CefSharp.Structs;
5+
using CefSharp.Wpf.Example.Views;
66
using System;
7-
using System.Collections.Generic;
8-
using CursorType = CefSharp.Enums.CursorType;
9-
using Size = CefSharp.Structs.Size;
7+
using System.Windows;
8+
using System.Windows.Controls;
9+
using System.Windows.Data;
10+
using System.Windows.Media;
1011

1112
namespace CefSharp.Wpf.Example.Handlers
1213
{
13-
public class DisplayHandler : IDisplayHandler
14+
public class DisplayHandler : CefSharp.Handler.DisplayHandler
1415
{
15-
16-
void IDisplayHandler.OnAddressChanged(IWebBrowser chromiumWebBrowser, AddressChangedEventArgs addressChangedArgs)
17-
{
18-
19-
}
20-
21-
bool IDisplayHandler.OnAutoResize(IWebBrowser chromiumWebBrowser, IBrowser browser, Size newSize)
22-
{
23-
return false;
24-
}
25-
26-
bool IDisplayHandler.OnCursorChange(IWebBrowser chromiumWebBrowser, IBrowser browser, IntPtr cursor, CursorType type, CursorInfo customCursorInfo)
27-
{
28-
return false;
29-
}
30-
31-
void IDisplayHandler.OnTitleChanged(IWebBrowser chromiumWebBrowser, TitleChangedEventArgs titleChangedArgs)
32-
{
33-
34-
}
35-
36-
void IDisplayHandler.OnFaviconUrlChange(IWebBrowser chromiumWebBrowser, IBrowser browser, IList<string> urls)
37-
{
38-
39-
}
40-
41-
void IDisplayHandler.OnFullscreenModeChange(IWebBrowser chromiumWebBrowser, IBrowser browser, bool fullscreen)
42-
{
43-
44-
}
45-
46-
void IDisplayHandler.OnLoadingProgressChange(IWebBrowser chromiumWebBrowser, IBrowser browser, double progress)
47-
{
48-
49-
}
50-
51-
bool IDisplayHandler.OnTooltipChanged(IWebBrowser chromiumWebBrowser, ref string text)
52-
{
53-
//text = "Sample text";
54-
return false;
55-
}
56-
57-
void IDisplayHandler.OnStatusMessage(IWebBrowser chromiumWebBrowser, StatusMessageEventArgs statusMessageArgs)
58-
{
59-
60-
}
61-
62-
bool IDisplayHandler.OnConsoleMessage(IWebBrowser chromiumWebBrowser, ConsoleMessageEventArgs consoleMessageArgs)
63-
{
64-
return false;
16+
private Grid parent;
17+
private Window fullScreenWindow;
18+
19+
protected override void OnFullscreenModeChange(IWebBrowser chromiumWebBrowser, IBrowser browser, bool fullscreen)
20+
{
21+
var webBrowser = (ChromiumWebBrowser)chromiumWebBrowser;
22+
23+
webBrowser.Dispatcher.BeginInvoke((Action)(() =>
24+
{
25+
if (fullscreen)
26+
{
27+
//In this example the parent is a Grid, if your parent is a different type
28+
//of control then update this code accordingly.
29+
parent = (Grid)VisualTreeHelper.GetParent(webBrowser);
30+
31+
//NOTE: If the ChromiumWebBrowser instance doesn't have a direct reference to
32+
//the DataContext in this case the BrowserTabViewModel then your bindings won't
33+
//be updated/might cause issues like the browser reloads the Url when exiting
34+
//fullscreen.
35+
parent.Children.Remove(webBrowser);
36+
37+
fullScreenWindow = new Window
38+
{
39+
WindowStyle = WindowStyle.None,
40+
WindowState = WindowState.Maximized,
41+
Content = webBrowser
42+
};
43+
44+
fullScreenWindow.ShowDialog();
45+
}
46+
else
47+
{
48+
fullScreenWindow.Content = null;
49+
50+
parent.Children.Add(webBrowser);
51+
52+
fullScreenWindow.Close();
53+
fullScreenWindow = null;
54+
parent = null;
55+
}
56+
}));
6557
}
6658
}
6759
}

CefSharp.Wpf.Example/Views/BrowserTabView.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,7 @@
430430
Title="{Binding Title, Mode=OneWayToSource}"
431431
AllowDrop="True"
432432
WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}"
433+
DataContext="{Binding}"
433434
RenderOptions.BitmapScalingMode="{Binding ElementName=scalingModeComboBox, Path=SelectedItem}">
434435
<!-- Just an example of how you may override the BrowserSettings. Disabled by default since it looks so
435436
incredibly ugly... -->

0 commit comments

Comments
 (0)