1using CommunityToolkit.Maui;
2using CommunityToolkit.Maui.Markup;
3using Microsoft.Extensions.Logging;
4using Microsoft.Maui.Controls.Handlers.Items;
5using Microsoft.Maui.Handlers;
6using Microsoft.Maui.LifecycleEvents;
12using ZXing.Net.Maui.Controls;
13using Microsoft.Maui.Platform;
14using SkiaSharp.Views.Maui.Controls.Hosting;
15using SkiaSharp.Views.Maui.Controls;
22using SkiaSharp.Views.Maui.Handlers;
27using DotNet.Meteor.HotReload.Plugin;
30using Microsoft.Maui.Controls.Compatibility.Platform.Android;
36using Microsoft.UI.Xaml;
37using Microsoft.UI.Xaml.Controls;
38using Microsoft.UI.Xaml.Media;
39using WinScrollBarVisibility =
Microsoft.UI.Xaml.Controls.ScrollBarVisibility;
40using WinThickness =
Microsoft.UI.Xaml.Thickness;
41using WinSolidColorBrush =
Microsoft.UI.Xaml.Media.SolidColorBrush;
48 private static MauiApp? instance;
50 public static MauiApp CreateMauiApp()
52 InitMauiControlsHandlers();
54 MauiAppBuilder Builder = MauiApp.CreateBuilder();
56 Builder.UseMauiApp<
App>();
58 Builder.ConfigureMauiHandlers(handlers =>
60 #if IOS || MACCATALYST
61 handlers.AddHandler<
Microsoft.Maui.Controls.CollectionView,
Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>();
62 handlers.AddHandler<
Microsoft.Maui.Controls.CarouselView,
Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>();
68 Builder.ConfigureLifecycleEvents(lifecycle =>
71 lifecycle.AddAndroid(android =>
72 android.OnResume(activity =>
75 App.RaiseAppActivated();
78 lifecycle.AddiOS(ios =>
79 ios.OnActivated(app =>
82 App.RaiseAppActivated();
85 lifecycle.AddWindows(windows =>
86 windows.OnActivated((window, args) =>
89 App.RaiseAppActivated();
94 Builder.UseSkiaSharp();
95 Builder.RegisterFirebaseServices();
97 Builder.EnableHotReload();
98 Builder.Logging.AddDebug();
101 Builder.ConfigureFonts(fonts =>
103 fonts.AddFont(
"SpaceGrotesk-Bold.ttf",
"SpaceGroteskBold");
104 fonts.AddFont(
"SpaceGrotesk-SemiBold.ttf",
"SpaceGroteskSemiBold");
105 fonts.AddFont(
"SpaceGrotesk-Medium.ttf",
"SpaceGroteskMedium");
106 fonts.AddFont(
"SpaceGrotesk-Regular.ttf",
"SpaceGroteskRegular");
107 fonts.AddFont(
"NHaasGroteskTXPro-75Bd.ttf",
"HaasGroteskBold");
108 fonts.AddFont(
"NHaasGroteskTXPro-55Rg.ttf",
"HaasGroteskRegular");
113 Builder.UseMauiCommunityToolkit();
115 Builder.UseMauiCommunityToolkit(Options =>
117 Options.SetShouldSuppressExceptionsInAnimations(
true);
118 Options.SetShouldSuppressExceptionsInBehaviors(
true);
119 Options.SetShouldSuppressExceptionsInConverters(
true);
122 Builder.UseMauiCommunityToolkitMarkup();
123 Builder.UseBarcodeReader();
127#if ANDROID || IOS || WINDOWS
132 Builder.RegisterTypes();
133 Builder.RegisterPages();
135 instance = Builder.Build();
148 private static void InitMauiControlsHandlers()
151 LayoutHandler.Mapper.AppendToMapping(
"GlobalIgnoreSafeArea", (handler, view) =>
154 if(view is
Microsoft.Maui.Controls.Layout layout)
155 layout.IgnoreSafeArea =
true;
159 ScrollViewHandler.Mapper.AppendToMapping(
"BouncesScrollViewHandler", (handler, view) =>
161 if (handler.PlatformView is UIScrollView scroll)
163 scroll.Bounces = false;
167 CollectionViewHandler.Mapper.AppendToMapping(
"BouncesCollectionViewHandler", (handler, view) =>
169 if (handler.PlatformView is UIScrollView scroll)
171 scroll.Bounces = false;
175 Microsoft.Maui.Handlers.EntryHandler.Mapper.AppendToMapping(
"BorderStyleEntryHandler", (handler, view) =>
177 handler.PlatformView.BorderStyle = UIKit.UITextBorderStyle.None;
180 EditorHandler.Mapper.AppendToMapping(
"BorderlessEditorHandler", (handler, view) =>
182 handler.PlatformView.BackgroundColor = UIKit.UIColor.Clear;
185 PickerHandler.Mapper.AppendToMapping(
"BorderlessPickerHandler", (handler, view) =>
187 handler.PlatformView.BackgroundColor = UIKit.UIColor.Clear;
190 DatePickerHandler.Mapper.AppendToMapping(
"BorderlessDatePickerHandler", (handler, view) =>
192 handler.PlatformView.BorderStyle = UIKit.UITextBorderStyle.None;
193 handler.PlatformView.BackgroundColor = UIKit.UIColor.Clear;
196 TimePickerHandler.Mapper.AppendToMapping(
"BorderlessTimePickerHandler", (handler, view) =>
198 handler.PlatformView.BorderStyle = UIKit.UITextBorderStyle.None;
199 handler.PlatformView.BackgroundColor = UIKit.UIColor.Clear;
202 ScrollViewHandler.Mapper.AppendToMapping(
"OverScrollModeScrollViewHandler", (handler, view) =>
204 handler.PlatformView.OverScrollMode = Android.Views.OverScrollMode.Never;
207 CollectionViewHandler.Mapper.AppendToMapping(
"OverScrollModeCollectionViewHandler", (handler, view) =>
209 handler.PlatformView.OverScrollMode = Android.Views.OverScrollMode.Never;
212 EntryHandler.Mapper.AppendToMapping(
"NoUnderlineEntryHandler", (handler, view) =>
214 handler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(Colors.Transparent.ToAndroid());
216 PickerHandler.Mapper.AppendToMapping(
"NoUnderlinePickerHandler", (handler, view) =>
218 handler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(Colors.Transparent.ToAndroid());
220 TimePickerHandler.Mapper.AppendToMapping(
"NoUnderlineTimePickerHandler", (handler, view) =>
222 handler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(Colors.Transparent.ToAndroid());
224 DatePickerHandler.Mapper.AppendToMapping(
"NoUnderlineDatePickerHandler", (handler, view) =>
226 handler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(Colors.Transparent.ToAndroid());
228 ImageHandler.Mapper.PrependToMapping(nameof(
Microsoft.Maui.IImage.Source), (handler, view) =>
230 handler.PlatformView?.Clear();
233 ScrollViewHandler.Mapper.AppendToMapping(
"HideScrollBarsScrollViewHandler", (handler, view) =>
235 if (handler.PlatformView is ScrollViewer ScrollViewer)
237 ScrollViewer.VerticalScrollBarVisibility = WinScrollBarVisibility.Hidden;
238 ScrollViewer.HorizontalScrollBarVisibility = WinScrollBarVisibility.Hidden;
242 CollectionViewHandler.Mapper.AppendToMapping(
"HideScrollBarsCollectionViewHandler", (handler, view) =>
244 if (handler.PlatformView is ListViewBase ListViewBase)
246 ScrollViewer? NestedScrollViewer = FindDescendantScrollViewer(ListViewBase);
247 if (NestedScrollViewer is not null)
249 NestedScrollViewer.VerticalScrollBarVisibility = WinScrollBarVisibility.Hidden;
250 NestedScrollViewer.HorizontalScrollBarVisibility = WinScrollBarVisibility.Hidden;
255 EntryHandler.Mapper.AppendToMapping(
"NoBorderEntryHandler", (handler, view) =>
257 if (handler.PlatformView is TextBox TextBox)
259 TextBox.BorderThickness = new WinThickness(0);
260 TextBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
261 TextBox.Background = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
262 TextBox.GotFocus += (sender, args) =>
264 TextBox.BorderThickness = new WinThickness(0);
265 TextBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
267 TextBox.Loaded += (sender, args) =>
269 TextBox.BorderThickness = new WinThickness(0);
270 TextBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
275 EditorHandler.Mapper.AppendToMapping(
"NoBorderEditorHandler", (handler, view) =>
277 if (handler.PlatformView is TextBox TextBox)
279 TextBox.BorderThickness = new WinThickness(0);
280 TextBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
281 TextBox.Background = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
282 TextBox.GotFocus += (sender, args) =>
284 TextBox.BorderThickness = new WinThickness(0);
285 TextBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
287 TextBox.Loaded += (sender, args) =>
289 TextBox.BorderThickness = new WinThickness(0);
290 TextBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
295 PickerHandler.Mapper.AppendToMapping(
"NoBorderPickerHandler", (handler, view) =>
297 if (handler.PlatformView is ComboBox ComboBox)
299 ComboBox.BorderThickness = new WinThickness(0);
300 ComboBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
301 ComboBox.Background = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
302 ComboBox.GotFocus += (sender, args) =>
304 ComboBox.BorderThickness = new WinThickness(0);
305 ComboBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
307 ComboBox.Loaded += (sender, args) =>
309 ComboBox.BorderThickness = new WinThickness(0);
310 ComboBox.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
315 DatePickerHandler.Mapper.AppendToMapping(
"NoBorderDatePickerHandler", (handler, view) =>
317 if (handler.PlatformView is CalendarDatePicker CalendarDatePicker)
319 CalendarDatePicker.BorderThickness = new WinThickness(0);
320 CalendarDatePicker.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
321 CalendarDatePicker.Background = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
322 CalendarDatePicker.GotFocus += (sender, args) =>
324 CalendarDatePicker.BorderThickness = new WinThickness(0);
325 CalendarDatePicker.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
327 CalendarDatePicker.Loaded += (sender, args) =>
329 CalendarDatePicker.BorderThickness = new WinThickness(0);
330 CalendarDatePicker.BorderBrush = new WinSolidColorBrush(Microsoft.UI.Colors.Transparent);
339 private static ScrollViewer? FindDescendantScrollViewer(DependencyObject Root)
341 int Count = VisualTreeHelper.GetChildrenCount(Root);
342 for (
int i = 0; i < Count; i++)
344 DependencyObject Child = VisualTreeHelper.GetChild(Root, i);
345 if (Child is ScrollViewer Found)
350 ScrollViewer? Nested = FindDescendantScrollViewer(Child);
351 if (Nested is not
null)
Represents an instance of the Neuro-Access app.
static ? MauiApp Current
Current MAUI app instance.
A strongly-typed resource class, for looking up localized strings, etc.
Base class that references services in the app.
static void Initialize(IServiceProvider provider)
Initializes the service reference cache with a fresh provider instance. This method must be called wh...
Default implementation of IKeyboardInsetsService that normalizes platform keyboard measurements.
Provides normalized keyboard inset information for UI components.