/
ViewMode.cs
79 lines (62 loc) · 2.21 KB
/
ViewMode.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
namespace TopMostWindow
{
public class ViewMode
{
public static event EventHandler ViewModeChanged;
public static bool IsCompactOverlaySupported
=> ApplicationView.GetForCurrentView()
.IsViewModeSupported(ApplicationViewMode.CompactOverlay);
public static ApplicationViewMode CurrentMode
=> ApplicationView.GetForCurrentView().ViewMode;
public static bool IsCompactOverlayMode
=> (CurrentMode == ApplicationViewMode.CompactOverlay);
public static bool IsDefaultMode
=> (CurrentMode == ApplicationViewMode.Default);
public static Size LastWindowSize { get; private set; }
private static void SetLastWindowSize()
{
var rect = Window.Current.Bounds;
LastWindowSize = new Size(rect.Width, rect.Height);
}
static ViewMode()
{
Window.Current.SizeChanged += (s, e) =>
{
if (CurrentMode == ApplicationViewMode.CompactOverlay)
SetLastWindowSize();
};
}
public static async Task<bool> EnterCompactOverlayAsync(Size desiredSize = default(Size))
{
if (!IsCompactOverlaySupported)
return false;
ViewModePreferences compactOptions
= ViewModePreferences.CreateDefault(ApplicationViewMode.CompactOverlay);
if (desiredSize != default(Size))
compactOptions.CustomSize = desiredSize;
bool modeSwitched
= await ApplicationView.GetForCurrentView()
.TryEnterViewModeAsync(ApplicationViewMode.CompactOverlay, compactOptions);
if (modeSwitched)
ViewModeChanged?.Invoke(ApplicationView.GetForCurrentView(), EventArgs.Empty);
return modeSwitched;
}
public static async Task<bool> ExitCompactOverlayAsync()
{
if (!IsCompactOverlaySupported)
return false;
SetLastWindowSize();
bool modeSwitched
= await ApplicationView.GetForCurrentView()
.TryEnterViewModeAsync(ApplicationViewMode.Default);
if (modeSwitched)
ViewModeChanged?.Invoke(ApplicationView.GetForCurrentView(), EventArgs.Empty);
return modeSwitched;
}
}
}