diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index fdbd22e5..94991546 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -17,7 +17,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- os: [windows-latest, macos-13]
+ os: [windows-latest, macos-14]
steps:
- name: Prepare variables on Windows
@@ -26,7 +26,7 @@ jobs:
echo "WORKING_DIRECTORY_PATH=C:/Projects/MauiSamples" >> $env:GITHUB_ENV
- name: Prepare variables on macOS
- if: ${{ matrix.os == 'macos-13' }}
+ if: ${{ matrix.os == 'macos-14' }}
run: |
echo "WORKING_DIRECTORY_PATH=/Users/runner/Projects/MauiSamples" >> $GITHUB_ENV
@@ -37,15 +37,15 @@ jobs:
git checkout ${{ github.head_ref || github.ref_name }}
- name: Setup Xcode
- if: ${{ matrix.os == 'macos-13' }}
+ if: ${{ matrix.os == 'macos-14' }}
uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: '15.1'
+ xcode-version: '16.0'
- name: Setup .NET
- uses: actions/setup-dotnet@v3
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: 8.x
+ dotnet-version: 9.x
- name: Install dependencies
run: dotnet workload install maui
@@ -60,4 +60,4 @@ jobs:
run: |
cd ${{ env.WORKING_DIRECTORY_PATH }}
dotnet restore --configfile NuGet.config
- dotnet build --tl
+ dotnet build
diff --git a/AndroidBindableLibraries/Balloon/Balloon.csproj b/AndroidBindableLibraries/Balloon/Balloon.csproj
index b7a9814d..e3778404 100644
--- a/AndroidBindableLibraries/Balloon/Balloon.csproj
+++ b/AndroidBindableLibraries/Balloon/Balloon.csproj
@@ -2,7 +2,7 @@
23
VladislavAntonyuk.$(AssemblyName)
- 1.6.4
+ 1.6.4.1
ReadMe.md
..\..\LocalPackages\
@@ -18,22 +18,22 @@
8.4.0
- 2.7.0.2
+ 2.8.5.1
- 1.7.1.2
+ 1.8.2.1
- 1.9.23.1
+ 2.0.10.1
- 1.6.1.8
+ 1.7.0.3
- 1.13.1
+ 1.13.1.5
- 1.7.0
+ 1.8.3.1
diff --git a/AndroidBindableLibraries/Directory.Build.props b/AndroidBindableLibraries/Directory.Build.props
index 1ef3cd4d..a72c6e98 100644
--- a/AndroidBindableLibraries/Directory.Build.props
+++ b/AndroidBindableLibraries/Directory.Build.props
@@ -1,7 +1,7 @@
- net8.0-android
+ net9.0-android
enable
enable
true
diff --git a/AndroidBindableLibraries/MaterialCalendarView/MaterialCalendarView.csproj b/AndroidBindableLibraries/MaterialCalendarView/MaterialCalendarView.csproj
index ba3d8ed4..af68a120 100644
--- a/AndroidBindableLibraries/MaterialCalendarView/MaterialCalendarView.csproj
+++ b/AndroidBindableLibraries/MaterialCalendarView/MaterialCalendarView.csproj
@@ -2,7 +2,7 @@
23
VladislavAntonyuk.$(AssemblyName)
- 1.9.0
+ 1.9.0.1
ReadMe.md
..\..\LocalPackages\
@@ -17,28 +17,28 @@
- 1.6.1.7
+ 1.7.0.3
2.1.4.10
- 1.12.0.4
+ 1.13.1.5
- 1.9.23
+ 2.0.10.1
1.9.23
-
-
-
+
+
+
- 1.6.2.2
+ 1.8.3.1
diff --git a/AndroidBindableLibraries/Sample/App.xaml.cs b/AndroidBindableLibraries/Sample/App.xaml.cs
index 0d0f7b65..7e3f336b 100644
--- a/AndroidBindableLibraries/Sample/App.xaml.cs
+++ b/AndroidBindableLibraries/Sample/App.xaml.cs
@@ -1,12 +1,14 @@
-namespace Sample
+namespace Sample;
+
+public partial class App : Application
{
- public partial class App : Application
+ public App()
{
- public App()
- {
- InitializeComponent();
+ InitializeComponent();
+ }
- MainPage = new AppShell();
- }
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
-}
+}
\ No newline at end of file
diff --git a/AndroidBindableLibraries/Sample/AppShell.xaml.cs b/AndroidBindableLibraries/Sample/AppShell.xaml.cs
index a3797080..198efea1 100644
--- a/AndroidBindableLibraries/Sample/AppShell.xaml.cs
+++ b/AndroidBindableLibraries/Sample/AppShell.xaml.cs
@@ -1,10 +1,9 @@
-namespace Sample
+namespace Sample;
+
+public partial class AppShell : Shell
{
- public partial class AppShell : Shell
+ public AppShell()
{
- public AppShell()
- {
- InitializeComponent();
- }
+ InitializeComponent();
}
-}
+}
\ No newline at end of file
diff --git a/AndroidBindableLibraries/Sample/Calendar/CalendarMaterialHandler.cs b/AndroidBindableLibraries/Sample/Calendar/CalendarMaterialHandler.cs
index 3a72e6fa..7fb9751b 100644
--- a/AndroidBindableLibraries/Sample/Calendar/CalendarMaterialHandler.cs
+++ b/AndroidBindableLibraries/Sample/Calendar/CalendarMaterialHandler.cs
@@ -39,9 +39,8 @@ protected override void ConnectHandler(Calendar platformView)
private void PlatformView_SelectedDatesChanged(object? sender, CalendarDayClickEventArgs e)
{
var calendar = e.CalendarDay.Calendar;
- var time = TimeSpan.FromMilliseconds(calendar.TimeInMillis);
- var result = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
- VirtualView.SelectedDate = new DateTimeOffset(result.Add(time).Add(TimeSpan.FromMilliseconds(calendar.TimeZone.RawOffset)));
+ var result = new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0));
+ VirtualView.SelectedDate = result.AddMilliseconds(calendar.TimeInMillis).Add(result.Offset);
VirtualView.OnSelectedDateChanged(VirtualView.SelectedDate);
}
diff --git a/AndroidBindableLibraries/Sample/MainPage.xaml.cs b/AndroidBindableLibraries/Sample/MainPage.xaml.cs
index 8d63a8c5..dfda529e 100644
--- a/AndroidBindableLibraries/Sample/MainPage.xaml.cs
+++ b/AndroidBindableLibraries/Sample/MainPage.xaml.cs
@@ -1,52 +1,51 @@
-namespace Sample
-{
- using Android.Views;
- using Com.Skydoves.Balloon;
- using Microsoft.Maui.Platform;
+namespace Sample;
- public partial class MainPage : ContentPage
- {
- public MainPage()
- {
- InitializeComponent();
- }
+using Android.Views;
+using Com.Skydoves.Balloon;
+using Microsoft.Maui.Platform;
- private void OnCounterClicked(object sender, EventArgs e)
- {
- var balloon = new Balloon.Builder(Platform.AppContext)
- .SetText("Edit your profile here!")
- .SetTextSize(15f)
- .SetArrowPositionRules(ArrowPositionRules.AlignAnchor)
- .SetArrowSize(10)
- .SetArrowPosition(0.5f)
- .SetPadding(12)
- .SetCornerRadius(8f)
- .SetBalloonAnimation(BalloonAnimation.Elastic)
- .SetOnBalloonDismissListener(new BallonDismissListener(() =>
- {
- var balloon2 = new Balloon.Builder(Platform.AppContext)
- .SetWidthRatio(1.0f)
- .SetHeight(BalloonSizeSpec.Wrap)
- .SetLayout(new BallonContent().ToPlatform(Handler.MauiContext))
- .SetArrowPositionRules(ArrowPositionRules.AlignAnchor)
- .SetArrowSize(10)
- .SetArrowPosition(0.5f)
- .SetPadding(12)
- .SetCornerRadius(8f)
- .SetBalloonAnimation(BalloonAnimation.Fade)
- .Build();
- balloon2.ShowAtCenter(MauiLabel.ToPlatform(MauiLabel.Handler.MauiContext));
- }))
- .Build();
- balloon.ShowAtCenter(CounterBtn.ToPlatform(CounterBtn.Handler.MauiContext));
- }
+public partial class MainPage : ContentPage
+{
+ public MainPage()
+ {
+ InitializeComponent();
}
- internal class BallonDismissListener(Action action) : Java.Lang.Object, IOnBalloonDismissListener
+ private void OnCounterClicked(object sender, EventArgs e)
{
- public void OnBalloonDismiss()
- {
- action();
- }
+ var balloon = new Balloon.Builder(Platform.AppContext)
+ .SetText("Edit your profile here!")
+ .SetTextSize(15f)
+ .SetArrowPositionRules(ArrowPositionRules.AlignAnchor)
+ .SetArrowSize(10)
+ .SetArrowPosition(0.5f)
+ .SetPadding(12)
+ .SetCornerRadius(8f)
+ .SetBalloonAnimation(BalloonAnimation.Elastic)
+ .SetOnBalloonDismissListener(new BallonDismissListener(() =>
+ {
+ var balloon2 = new Balloon.Builder(Platform.AppContext)
+ .SetWidthRatio(1.0f)
+ .SetHeight(BalloonSizeSpec.Wrap)
+ .SetLayout(new BallonContent().ToPlatform(Handler.MauiContext))
+ .SetArrowPositionRules(ArrowPositionRules.AlignAnchor)
+ .SetArrowSize(10)
+ .SetArrowPosition(0.5f)
+ .SetPadding(12)
+ .SetCornerRadius(8f)
+ .SetBalloonAnimation(BalloonAnimation.Fade)
+ .Build();
+ balloon2.ShowAtCenter(MauiLabel.ToPlatform(MauiLabel.Handler.MauiContext));
+ }))
+ .Build();
+ balloon.ShowAtCenter(CounterBtn.ToPlatform(CounterBtn.Handler.MauiContext));
}
}
+
+internal class BallonDismissListener(Action action) : Java.Lang.Object, IOnBalloonDismissListener
+{
+ public void OnBalloonDismiss()
+ {
+ action();
+ }
+}
\ No newline at end of file
diff --git a/AndroidBindableLibraries/Sample/MauiProgram.cs b/AndroidBindableLibraries/Sample/MauiProgram.cs
index 651db428..190e02b0 100644
--- a/AndroidBindableLibraries/Sample/MauiProgram.cs
+++ b/AndroidBindableLibraries/Sample/MauiProgram.cs
@@ -1,26 +1,25 @@
-namespace Sample
-{
- using Calendar;
- using MauiBells.Calendar;
+namespace Sample;
+
+using Calendar;
+using MauiBells.Calendar;
- public static class MauiProgram
+public static class MauiProgram
+{
+ public static MauiApp CreateMauiApp()
{
- public static MauiApp CreateMauiApp()
- {
- var builder = MauiApp.CreateBuilder();
- builder
- .UseMauiApp()
- .ConfigureFonts(fonts =>
- {
- fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
- fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
- })
- .ConfigureMauiHandlers(x =>
- {
- x.AddHandler();
- });
+ var builder = MauiApp.CreateBuilder();
+ builder
+ .UseMauiApp()
+ .ConfigureFonts(fonts =>
+ {
+ fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
+ fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
+ })
+ .ConfigureMauiHandlers(x =>
+ {
+ x.AddHandler();
+ });
- return builder.Build();
- }
+ return builder.Build();
}
-}
+}
\ No newline at end of file
diff --git a/AndroidBindableLibraries/Sample/Platforms/Android/MainActivity.cs b/AndroidBindableLibraries/Sample/Platforms/Android/MainActivity.cs
index 0873ecd5..20841d06 100644
--- a/AndroidBindableLibraries/Sample/Platforms/Android/MainActivity.cs
+++ b/AndroidBindableLibraries/Sample/Platforms/Android/MainActivity.cs
@@ -1,11 +1,10 @@
-namespace Sample
-{
- using Android.App;
- using Android.Content.PM;
- using Android.OS;
+namespace Sample;
+
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
- [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
- public class MainActivity : MauiAppCompatActivity
- {
- }
-}
+[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
+public class MainActivity : MauiAppCompatActivity
+{
+}
\ No newline at end of file
diff --git a/AndroidBindableLibraries/Sample/Platforms/Android/MainApplication.cs b/AndroidBindableLibraries/Sample/Platforms/Android/MainApplication.cs
index 0b3d7ab1..139582da 100644
--- a/AndroidBindableLibraries/Sample/Platforms/Android/MainApplication.cs
+++ b/AndroidBindableLibraries/Sample/Platforms/Android/MainApplication.cs
@@ -1,16 +1,15 @@
-namespace Sample
-{
- using Android.App;
- using Android.Runtime;
+namespace Sample;
- [Application]
- public class MainApplication : MauiApplication
- {
- public MainApplication(IntPtr handle, JniHandleOwnership ownership)
- : base(handle, ownership)
- {
- }
+using Android.App;
+using Android.Runtime;
- protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+[Application]
+public class MainApplication : MauiApplication
+{
+ public MainApplication(IntPtr handle, JniHandleOwnership ownership)
+ : base(handle, ownership)
+ {
}
-}
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
\ No newline at end of file
diff --git a/AndroidBindableLibraries/Sample/Sample.csproj b/AndroidBindableLibraries/Sample/Sample.csproj
index 4fdca70f..772b60fa 100644
--- a/AndroidBindableLibraries/Sample/Sample.csproj
+++ b/AndroidBindableLibraries/Sample/Sample.csproj
@@ -40,10 +40,9 @@
-
-
-
-
+
+
+
diff --git a/Auth/AuthServices/AuthServices.csproj b/Auth/AuthServices/AuthServices.csproj
index 1c8fb5f6..0cc8ca3c 100644
--- a/Auth/AuthServices/AuthServices.csproj
+++ b/Auth/AuthServices/AuthServices.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/Auth/MauiAuth/App.xaml.cs b/Auth/MauiAuth/App.xaml.cs
index d6929639..a4929db2 100644
--- a/Auth/MauiAuth/App.xaml.cs
+++ b/Auth/MauiAuth/App.xaml.cs
@@ -3,10 +3,16 @@
public partial class App : Application
{
+ private readonly MainPage mainPage;
+
public App(MainPage mainPage)
{
+ this.mainPage = mainPage;
InitializeComponent();
+ }
- MainPage = new NavigationPage(mainPage);
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new NavigationPage(mainPage));
}
}
\ No newline at end of file
diff --git a/Auth/MauiAuth/MauiAuth.csproj b/Auth/MauiAuth/MauiAuth.csproj
index 0618a01b..14e4265c 100644
--- a/Auth/MauiAuth/MauiAuth.csproj
+++ b/Auth/MauiAuth/MauiAuth.csproj
@@ -25,8 +25,8 @@
-
-
+
+
diff --git a/Auth/MauiAuthBlazor/App.xaml.cs b/Auth/MauiAuthBlazor/App.xaml.cs
index 9ae5805b..c6719904 100644
--- a/Auth/MauiAuthBlazor/App.xaml.cs
+++ b/Auth/MauiAuthBlazor/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/Auth/MauiAuthBlazor/MauiAuthBlazor.csproj b/Auth/MauiAuthBlazor/MauiAuthBlazor.csproj
index db3e97bb..9effe18a 100644
--- a/Auth/MauiAuthBlazor/MauiAuthBlazor.csproj
+++ b/Auth/MauiAuthBlazor/MauiAuthBlazor.csproj
@@ -26,7 +26,7 @@
-
+
@@ -34,7 +34,7 @@
-
+
diff --git a/BottomSheet/App.xaml.cs b/BottomSheet/App.xaml.cs
index 08b66091..5a267e8a 100644
--- a/BottomSheet/App.xaml.cs
+++ b/BottomSheet/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/CardLayout/App.xaml.cs b/CardLayout/App.xaml.cs
index 0e82b80f..e7e35d85 100644
--- a/CardLayout/App.xaml.cs
+++ b/CardLayout/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/CardLayout/CardLayout.csproj b/CardLayout/CardLayout.csproj
index 3a17f47d..054ccb58 100644
--- a/CardLayout/CardLayout.csproj
+++ b/CardLayout/CardLayout.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/CardLayout/CardsLayout.cs b/CardLayout/CardsLayout.cs
index e81b6f18..2fa969d2 100644
--- a/CardLayout/CardsLayout.cs
+++ b/CardLayout/CardsLayout.cs
@@ -310,7 +310,7 @@ public Size ArrangeChildren(Rect rectangle)
totalHeight + Padding.VerticalThickness);
}
- public Size Measure(double widthConstraint, double heightConstraint)
+ public new Size Measure(double widthConstraint, double heightConstraint)
{
widthConstraint -= Padding.HorizontalThickness;
heightConstraint -= Padding.VerticalThickness;
diff --git a/CardLayout/MauiProgram.cs b/CardLayout/MauiProgram.cs
index 2dd055f0..5c626065 100644
--- a/CardLayout/MauiProgram.cs
+++ b/CardLayout/MauiProgram.cs
@@ -1,13 +1,11 @@
namespace CardLayout;
-using Microsoft.Maui.Controls.Compatibility.Hosting;
-
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
- builder.UseMauiApp().UseMauiCompatibility();
+ builder.UseMauiApp();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
diff --git a/KanbanBoard/App.xaml b/Database/KanbanBoard/KanbanBoard/App.xaml
similarity index 100%
rename from KanbanBoard/App.xaml
rename to Database/KanbanBoard/KanbanBoard/App.xaml
diff --git a/KanbanBoard/App.xaml.cs b/Database/KanbanBoard/KanbanBoard/App.xaml.cs
similarity index 73%
rename from KanbanBoard/App.xaml.cs
rename to Database/KanbanBoard/KanbanBoard/App.xaml.cs
index c68eacf4..aed3ac7d 100644
--- a/KanbanBoard/App.xaml.cs
+++ b/Database/KanbanBoard/KanbanBoard/App.xaml.cs
@@ -1,5 +1,6 @@
namespace KanbanBoard;
using KanbanBoard.Models;
+using KanbanBoardDb;
using Microsoft.EntityFrameworkCore;
using Application = Microsoft.Maui.Controls.Application;
@@ -11,8 +12,17 @@ public App(IServiceProvider serviceProvider)
{
InitializeComponent();
this.serviceProvider = serviceProvider;
+ }
+
+ protected override void OnStart()
+ {
+ base.OnStart();
AddTestData().Wait();
- MainPage = serviceProvider.GetRequiredService();
+ }
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(serviceProvider.GetRequiredService());
}
private async Task AddTestData()
@@ -24,12 +34,12 @@ private async Task AddTestData()
var items = await appContext.Columns.Include(x => x.Cards).ToArrayAsync();
if (items.Length == 0)
{
- var todoColumn = new Column
+ var todoColumn = new KanbanColumn
{
Name = "ToDo",
Order = 0
};
- var inProgressColumn = new Column
+ var inProgressColumn = new KanbanColumn
{
Name = "In Progress",
Order = 1,
@@ -37,27 +47,27 @@ private async Task AddTestData()
};
await appContext.AddAsync(todoColumn);
await appContext.AddAsync(inProgressColumn);
- await appContext.AddAsync(new Column
+ await appContext.AddAsync(new KanbanColumn
{
Name = "Done",
Order = 2
});
- await appContext.AddAsync(new Card
+ await appContext.AddAsync(new KanbanCard
{
Name = "Card 1",
Description = "Description for card 1",
Order = 0,
Column = todoColumn
});
- await appContext.AddAsync(new Card
+ await appContext.AddAsync(new KanbanCard
{
Name = "Card 2",
Description = "Description for card 2",
Order = 1,
Column = todoColumn
});
- await appContext.AddAsync(new Card
+ await appContext.AddAsync(new KanbanCard
{
Name = "Card 3",
Description = "Description for card 3",
diff --git a/KanbanBoard/BoolToColorConverter.cs b/Database/KanbanBoard/KanbanBoard/BoolToColorConverter.cs
similarity index 94%
rename from KanbanBoard/BoolToColorConverter.cs
rename to Database/KanbanBoard/KanbanBoard/BoolToColorConverter.cs
index c8376582..5cc1508a 100644
--- a/KanbanBoard/BoolToColorConverter.cs
+++ b/Database/KanbanBoard/KanbanBoard/BoolToColorConverter.cs
@@ -2,6 +2,7 @@
using System.Globalization;
+[AcceptEmptyServiceProvider]
public class BoolToColorConverter : IValueConverter
{
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
diff --git a/KanbanBoard/Extensions.cs b/Database/KanbanBoard/KanbanBoard/Extensions.cs
similarity index 100%
rename from KanbanBoard/Extensions.cs
rename to Database/KanbanBoard/KanbanBoard/Extensions.cs
diff --git a/KanbanBoard/KanbanBoard.csproj b/Database/KanbanBoard/KanbanBoard/KanbanBoard.csproj
similarity index 73%
rename from KanbanBoard/KanbanBoard.csproj
rename to Database/KanbanBoard/KanbanBoard/KanbanBoard.csproj
index 6569fcbc..c174607a 100644
--- a/KanbanBoard/KanbanBoard.csproj
+++ b/Database/KanbanBoard/KanbanBoard/KanbanBoard.csproj
@@ -27,20 +27,19 @@
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/KanbanBoard/MainPage.xaml b/Database/KanbanBoard/KanbanBoard/MainPage.xaml
similarity index 96%
rename from KanbanBoard/MainPage.xaml
rename to Database/KanbanBoard/KanbanBoard/MainPage.xaml
index 330e4448..ef8c1200 100644
--- a/KanbanBoard/MainPage.xaml
+++ b/Database/KanbanBoard/KanbanBoard/MainPage.xaml
@@ -107,7 +107,7 @@
Grid.Column="0"
FontAttributes="Bold"
FontSize="{StaticResource ColumnTitleSize}"
- Text="{Binding Column.Name}" />
+ Text="{Binding KanbanColumn.Name}" />
@@ -174,13 +174,13 @@
Grid.Column="0"
FontAttributes="Bold"
FontSize="{StaticResource CardTitleSize}"
- Text="{Binding Card.Name}" />
+ Text="{Binding KanbanCard.Name}" />
diff --git a/KanbanBoard/MainPage.xaml.cs b/Database/KanbanBoard/KanbanBoard/MainPage.xaml.cs
similarity index 98%
rename from KanbanBoard/MainPage.xaml.cs
rename to Database/KanbanBoard/KanbanBoard/MainPage.xaml.cs
index 006dad7b..d2809c33 100644
--- a/KanbanBoard/MainPage.xaml.cs
+++ b/Database/KanbanBoard/KanbanBoard/MainPage.xaml.cs
@@ -2,6 +2,7 @@
using CommunityToolkit.Maui.Alerts;
using CommunityToolkit.Maui.Core;
+using KanbanBoardDb;
using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
using Models;
diff --git a/KanbanBoard/MainPageViewModel.cs b/Database/KanbanBoard/KanbanBoard/MainPageViewModel.cs
similarity index 75%
rename from KanbanBoard/MainPageViewModel.cs
rename to Database/KanbanBoard/KanbanBoard/MainPageViewModel.cs
index d7af8da5..cb4e839e 100644
--- a/KanbanBoard/MainPageViewModel.cs
+++ b/Database/KanbanBoard/KanbanBoard/MainPageViewModel.cs
@@ -6,6 +6,7 @@
using CommunityToolkit.Maui.Core;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
+using KanbanBoardDb;
using Microsoft.EntityFrameworkCore;
using Models;
@@ -31,13 +32,13 @@ public MainPageViewModel(KanbanBoardDbContext dbContext)
[RelayCommand]
async Task Drop(ColumnInfo? columnInfo)
{
- if (dragCard is null || columnInfo is null || columnInfo.Column.Cards.Count >= columnInfo.Column.Wip) return;
+ if (dragCard is null || columnInfo is null || columnInfo.KanbanColumn.Cards.Count >= columnInfo.KanbanColumn.Wip) return;
- var cardToUpdate = await dbContext.Cards.FirstOrDefaultAsync(x => x.Id == dragCard.Card.Id);
+ var cardToUpdate = await dbContext.Cards.FirstOrDefaultAsync(x => x.Id == dragCard.KanbanCard.Id);
if (cardToUpdate is not null)
{
- cardToUpdate.ColumnId = columnInfo.Column.Id;
- UpdateCardsOrder(columnInfo.Column);
+ cardToUpdate.ColumnId = columnInfo.KanbanColumn.Id;
+ UpdateCardsOrder(columnInfo.KanbanColumn);
await dbContext.SaveChangesAsync();
}
@@ -49,7 +50,7 @@ async Task Drop(ColumnInfo? columnInfo)
async Task DropOnCard(CardInfo? card)
{
if (card is null) return;
- var columnInfo = Columns.FirstOrDefault(x => x.Column.Cards.Contains(card.Card));
+ var columnInfo = Columns.FirstOrDefault(x => x.KanbanColumn.Cards.Contains(card.KanbanCard));
if (columnInfo is null) return;
await Drop(columnInfo);
}
@@ -58,14 +59,14 @@ async Task DropOnCard(CardInfo? card)
void ItemDragOver(CardInfo card)
{
card.IsDragOver = true;
- Debug.WriteLine($"ItemDraggedOver : {card.Card.Name}");
+ Debug.WriteLine($"ItemDraggedOver : {card.KanbanCard.Name}");
}
[RelayCommand]
void ItemDragLeave(CardInfo card)
{
card.IsDragOver = false;
- Debug.WriteLine($"ItemDraggedLeave : {card.Card.Name}");
+ Debug.WriteLine($"ItemDraggedLeave : {card.KanbanCard.Name}");
}
[RelayCommand]
@@ -119,7 +120,7 @@ async Task AddColumn()
int.TryParse(wipString, out wip);
} while (wip < 0);
- var column = new Column { Name = columnName, Wip = wip, Order = Columns.Count + 1 };
+ var column = new KanbanColumn { Name = columnName, Wip = wip, Order = Columns.Count + 1 };
await dbContext.Columns.AddAsync(column);
await dbContext.SaveChangesAsync();
await Refresh();
@@ -142,7 +143,7 @@ async Task AddCard(int columnId)
if (string.IsNullOrWhiteSpace(cardName)) return;
var cardDescription = await UserPromptAsync("New card", "Enter card description", Keyboard.Default);
- await dbContext.Cards.AddAsync(new Card
+ await dbContext.Cards.AddAsync(new KanbanCard
{
Name = cardName,
Description = cardDescription,
@@ -159,17 +160,17 @@ await dbContext.Cards.AddAsync(new Card
async Task DeleteCard(CardInfo? card)
{
if (card is null) return;
- var result = await AlertAsync("Delete card", $"Do you want to delete card \"{card.Card.Name}\"?");
+ var result = await AlertAsync("Delete card", $"Do you want to delete card \"{card.KanbanCard.Name}\"?");
if (!result) return;
await SnackbarAsync("The card is removed", "Cancel", async () =>
{
await ToastAsync("Task is cancelled");
- await dbContext.Cards.AddAsync(card.Card);
+ await dbContext.Cards.AddAsync(card.KanbanCard);
await dbContext.SaveChangesAsync();
await Refresh();
});
- dbContext.Cards.Remove(card.Card);
+ dbContext.Cards.Remove(card.KanbanCard);
await dbContext.SaveChangesAsync();
await Refresh();
}
@@ -179,17 +180,17 @@ async Task DeleteColumn(ColumnInfo? columnInfo)
{
if (columnInfo is null) return;
var result = await AlertAsync("Delete column",
- $"Do you want to delete column \"{columnInfo.Column.Name}\" and all its cards?");
+ $"Do you want to delete column \"{columnInfo.KanbanColumn.Name}\" and all its cards?");
if (!result) return;
await SnackbarAsync("The column is removed", "Cancel", async () =>
{
- await dbContext.Columns.AddAsync(columnInfo.Column);
+ await dbContext.Columns.AddAsync(columnInfo.KanbanColumn);
await dbContext.SaveChangesAsync();
await Refresh();
});
- await dbContext.Columns.Where(x => x.Id == columnInfo.Column.Id).ExecuteDeleteAsync();
+ await dbContext.Columns.Where(x => x.Id == columnInfo.KanbanColumn.Id).ExecuteDeleteAsync();
await Refresh();
}
@@ -206,7 +207,7 @@ private async Task Refresh()
Position = 0;
}
- private static ColumnInfo OrderCards(Column c, int columnNumber)
+ private static ColumnInfo OrderCards(KanbanColumn c, int columnNumber)
{
c.Cards = c.Cards.OrderBy(card => card.Order).ToObservableCollection();
return new ColumnInfo(columnNumber, c);
@@ -214,16 +215,18 @@ private static ColumnInfo OrderCards(Column c, int columnNumber)
private static Task AlertAsync(string title, string message)
{
- return Application.Current?.MainPage is null ?
+ var currentPage = Application.Current?.Windows.LastOrDefault()?.Page;
+ return currentPage is null ?
Task.FromResult(false) :
- Application.Current.MainPage.DisplayAlert(title, message, "Yes", "No");
+ currentPage.DisplayAlert(title, message, "Yes", "No");
}
private static Task UserPromptAsync(string title, string message, Keyboard keyboard)
{
- return Application.Current?.MainPage is null ?
+ var currentPage = Application.Current?.Windows.LastOrDefault()?.Page;
+ return currentPage is null ?
Task.FromResult(string.Empty) :
- Application.Current.MainPage.DisplayPromptAsync(title, message, keyboard: keyboard);
+ currentPage.DisplayPromptAsync(title, message, keyboard: keyboard);
}
private static Task SnackbarAsync(string title, string buttonText, Action action)
@@ -241,12 +244,12 @@ private static Task WipReachedToastAsync(string title)
return Toast.Make(title, ToastDuration.Long, 26d).Show();
}
- private void UpdateCardsOrder(Column column)
+ private void UpdateCardsOrder(KanbanColumn kanbanColumn)
{
- var cards = column.Cards.OrderBy(x => x.Order).ToList();
+ var cards = kanbanColumn.Cards.OrderBy(x => x.Order).ToList();
for (int i = 0; i < cards.Count; i++)
{
- column.Cards[i].Order = i;
+ kanbanColumn.Cards[i].Order = i;
}
}
}
\ No newline at end of file
diff --git a/KanbanBoard/MauiProgram.cs b/Database/KanbanBoard/KanbanBoard/MauiProgram.cs
similarity index 97%
rename from KanbanBoard/MauiProgram.cs
rename to Database/KanbanBoard/KanbanBoard/MauiProgram.cs
index ccad987b..196d5535 100644
--- a/KanbanBoard/MauiProgram.cs
+++ b/Database/KanbanBoard/KanbanBoard/MauiProgram.cs
@@ -5,6 +5,8 @@
namespace KanbanBoard;
+using KanbanBoardDb;
+
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
diff --git a/Database/KanbanBoard/KanbanBoard/Models/CardInfo.cs b/Database/KanbanBoard/KanbanBoard/Models/CardInfo.cs
new file mode 100644
index 00000000..f8e9e598
--- /dev/null
+++ b/Database/KanbanBoard/KanbanBoard/Models/CardInfo.cs
@@ -0,0 +1,12 @@
+namespace KanbanBoard.Models;
+
+using CommunityToolkit.Mvvm.ComponentModel;
+using KanbanBoardDb;
+
+public partial class CardInfo(KanbanCard kanbanCard) : ObservableObject
+{
+ [ObservableProperty]
+ private bool isDragOver;
+
+ public KanbanCard KanbanCard { get; } = kanbanCard;
+}
\ No newline at end of file
diff --git a/Database/KanbanBoard/KanbanBoard/Models/ColumnInfo.cs b/Database/KanbanBoard/KanbanBoard/Models/ColumnInfo.cs
new file mode 100644
index 00000000..2ce57f94
--- /dev/null
+++ b/Database/KanbanBoard/KanbanBoard/Models/ColumnInfo.cs
@@ -0,0 +1,13 @@
+namespace KanbanBoard.Models;
+
+using System.Collections.ObjectModel;
+using KanbanBoardDb;
+
+public class ColumnInfo(int index, KanbanColumn kanbanColumn)
+{
+ public KanbanColumn KanbanColumn { get; } = kanbanColumn;
+ public ObservableCollection Cards { get; } = kanbanColumn.Cards.Select(x => new CardInfo(x)).ToObservableCollection();
+ public int Index { get; } = index;
+
+ public bool IsWipReached => KanbanColumn.Cards.Count >= KanbanColumn.Wip;
+}
\ No newline at end of file
diff --git a/KanbanBoard/Platforms/Android/AndroidManifest.xml b/Database/KanbanBoard/KanbanBoard/Platforms/Android/AndroidManifest.xml
similarity index 100%
rename from KanbanBoard/Platforms/Android/AndroidManifest.xml
rename to Database/KanbanBoard/KanbanBoard/Platforms/Android/AndroidManifest.xml
diff --git a/KanbanBoard/Platforms/Android/MainActivity.cs b/Database/KanbanBoard/KanbanBoard/Platforms/Android/MainActivity.cs
similarity index 100%
rename from KanbanBoard/Platforms/Android/MainActivity.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/Android/MainActivity.cs
diff --git a/KanbanBoard/Platforms/Android/MainApplication.cs b/Database/KanbanBoard/KanbanBoard/Platforms/Android/MainApplication.cs
similarity index 100%
rename from KanbanBoard/Platforms/Android/MainApplication.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/Android/MainApplication.cs
diff --git a/KanbanBoard/Platforms/Android/Resources/values/colors.xml b/Database/KanbanBoard/KanbanBoard/Platforms/Android/Resources/values/colors.xml
similarity index 100%
rename from KanbanBoard/Platforms/Android/Resources/values/colors.xml
rename to Database/KanbanBoard/KanbanBoard/Platforms/Android/Resources/values/colors.xml
diff --git a/KanbanBoard/Platforms/MacCatalyst/AppDelegate.cs b/Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/AppDelegate.cs
similarity index 100%
rename from KanbanBoard/Platforms/MacCatalyst/AppDelegate.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/AppDelegate.cs
diff --git a/KanbanBoard/Platforms/MacCatalyst/Entitlements.Debug.plist b/Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Entitlements.Debug.plist
similarity index 100%
rename from KanbanBoard/Platforms/MacCatalyst/Entitlements.Debug.plist
rename to Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Entitlements.Debug.plist
diff --git a/KanbanBoard/Platforms/MacCatalyst/Entitlements.Release.plist b/Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Entitlements.Release.plist
similarity index 100%
rename from KanbanBoard/Platforms/MacCatalyst/Entitlements.Release.plist
rename to Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Entitlements.Release.plist
diff --git a/KanbanBoard/Platforms/MacCatalyst/Info.plist b/Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Info.plist
similarity index 100%
rename from KanbanBoard/Platforms/MacCatalyst/Info.plist
rename to Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Info.plist
diff --git a/KanbanBoard/Platforms/MacCatalyst/Program.cs b/Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Program.cs
similarity index 100%
rename from KanbanBoard/Platforms/MacCatalyst/Program.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/MacCatalyst/Program.cs
diff --git a/KanbanBoard/Platforms/Tizen/Main.cs b/Database/KanbanBoard/KanbanBoard/Platforms/Tizen/Main.cs
similarity index 100%
rename from KanbanBoard/Platforms/Tizen/Main.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/Tizen/Main.cs
diff --git a/KanbanBoard/Platforms/Tizen/tizen-manifest.xml b/Database/KanbanBoard/KanbanBoard/Platforms/Tizen/tizen-manifest.xml
similarity index 100%
rename from KanbanBoard/Platforms/Tizen/tizen-manifest.xml
rename to Database/KanbanBoard/KanbanBoard/Platforms/Tizen/tizen-manifest.xml
diff --git a/KanbanBoard/Platforms/Windows/App.xaml b/Database/KanbanBoard/KanbanBoard/Platforms/Windows/App.xaml
similarity index 100%
rename from KanbanBoard/Platforms/Windows/App.xaml
rename to Database/KanbanBoard/KanbanBoard/Platforms/Windows/App.xaml
diff --git a/KanbanBoard/Platforms/Windows/App.xaml.cs b/Database/KanbanBoard/KanbanBoard/Platforms/Windows/App.xaml.cs
similarity index 100%
rename from KanbanBoard/Platforms/Windows/App.xaml.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/Windows/App.xaml.cs
diff --git a/KanbanBoard/Platforms/Windows/Package.appxmanifest b/Database/KanbanBoard/KanbanBoard/Platforms/Windows/Package.appxmanifest
similarity index 100%
rename from KanbanBoard/Platforms/Windows/Package.appxmanifest
rename to Database/KanbanBoard/KanbanBoard/Platforms/Windows/Package.appxmanifest
diff --git a/KanbanBoard/Platforms/Windows/app.manifest b/Database/KanbanBoard/KanbanBoard/Platforms/Windows/app.manifest
similarity index 100%
rename from KanbanBoard/Platforms/Windows/app.manifest
rename to Database/KanbanBoard/KanbanBoard/Platforms/Windows/app.manifest
diff --git a/KanbanBoard/Platforms/iOS/AppDelegate.cs b/Database/KanbanBoard/KanbanBoard/Platforms/iOS/AppDelegate.cs
similarity index 100%
rename from KanbanBoard/Platforms/iOS/AppDelegate.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/iOS/AppDelegate.cs
diff --git a/KanbanBoard/Platforms/iOS/Info.plist b/Database/KanbanBoard/KanbanBoard/Platforms/iOS/Info.plist
similarity index 100%
rename from KanbanBoard/Platforms/iOS/Info.plist
rename to Database/KanbanBoard/KanbanBoard/Platforms/iOS/Info.plist
diff --git a/KanbanBoard/Platforms/iOS/Program.cs b/Database/KanbanBoard/KanbanBoard/Platforms/iOS/Program.cs
similarity index 100%
rename from KanbanBoard/Platforms/iOS/Program.cs
rename to Database/KanbanBoard/KanbanBoard/Platforms/iOS/Program.cs
diff --git a/KanbanBoard/Properties/launchSettings.json b/Database/KanbanBoard/KanbanBoard/Properties/launchSettings.json
similarity index 100%
rename from KanbanBoard/Properties/launchSettings.json
rename to Database/KanbanBoard/KanbanBoard/Properties/launchSettings.json
diff --git a/KanbanBoard/README.md b/Database/KanbanBoard/KanbanBoard/README.md
similarity index 80%
rename from KanbanBoard/README.md
rename to Database/KanbanBoard/KanbanBoard/README.md
index 87d09f28..aea947b7 100644
--- a/KanbanBoard/README.md
+++ b/Database/KanbanBoard/KanbanBoard/README.md
@@ -7,13 +7,13 @@ Article: https://vladislavantonyuk.github.io/articles/Creating-Kanban-Board-usin
## Build
```pwsh
dotnet ef dbcontext optimize -o Models\Optimized -c KanbanBoardDbContext -n KanbanBoard
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-android
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-android
xcrun simctl list devices
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-ios -p:_DeviceName=:v2:udid=XXX
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-maccatalyst
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-windows10.0.19041.0
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-tizen
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-ios -p:_DeviceName=:v2:udid=XXX
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-maccatalyst
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-windows10.0.19041.0
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-tizen
```
## Images
diff --git a/KanbanBoard/README.mdpp b/Database/KanbanBoard/KanbanBoard/README.mdpp
similarity index 77%
rename from KanbanBoard/README.mdpp
rename to Database/KanbanBoard/KanbanBoard/README.mdpp
index ffe375eb..27d45d4a 100644
--- a/KanbanBoard/README.mdpp
+++ b/Database/KanbanBoard/KanbanBoard/README.mdpp
@@ -7,13 +7,13 @@ Article: https://vladislavantonyuk.github.io/articles/Creating-Kanban-Board-usin
## Build
```pwsh
dotnet ef dbcontext optimize -o Models\Optimized -c KanbanBoardDbContext -n KanbanBoard
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-android
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-android
xcrun simctl list devices
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-ios -p:_DeviceName=:v2:udid=XXX
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-maccatalyst
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-windows10.0.19041.0
-dotnet build KanbanBoard.csproj -t:Run -f net8.0-tizen
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-ios -p:_DeviceName=:v2:udid=XXX
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-maccatalyst
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-windows10.0.19041.0
+dotnet build KanbanBoard.csproj -t:Run -f net9.0-tizen
```
## Images
diff --git a/KanbanBoard/Resources/AppIcon/appicon.svg b/Database/KanbanBoard/KanbanBoard/Resources/AppIcon/appicon.svg
similarity index 100%
rename from KanbanBoard/Resources/AppIcon/appicon.svg
rename to Database/KanbanBoard/KanbanBoard/Resources/AppIcon/appicon.svg
diff --git a/KanbanBoard/Resources/AppIcon/appiconfg.svg b/Database/KanbanBoard/KanbanBoard/Resources/AppIcon/appiconfg.svg
similarity index 100%
rename from KanbanBoard/Resources/AppIcon/appiconfg.svg
rename to Database/KanbanBoard/KanbanBoard/Resources/AppIcon/appiconfg.svg
diff --git a/KanbanBoard/Resources/Fonts/Font Awesome 6 Free-Solid-900.otf b/Database/KanbanBoard/KanbanBoard/Resources/Fonts/Font Awesome 6 Free-Solid-900.otf
similarity index 100%
rename from KanbanBoard/Resources/Fonts/Font Awesome 6 Free-Solid-900.otf
rename to Database/KanbanBoard/KanbanBoard/Resources/Fonts/Font Awesome 6 Free-Solid-900.otf
diff --git a/KanbanBoard/Resources/Splash/splash.svg b/Database/KanbanBoard/KanbanBoard/Resources/Splash/splash.svg
similarity index 100%
rename from KanbanBoard/Resources/Splash/splash.svg
rename to Database/KanbanBoard/KanbanBoard/Resources/Splash/splash.svg
diff --git a/KanbanBoard/Resources/Styles/Colors.xaml b/Database/KanbanBoard/KanbanBoard/Resources/Styles/Colors.xaml
similarity index 100%
rename from KanbanBoard/Resources/Styles/Colors.xaml
rename to Database/KanbanBoard/KanbanBoard/Resources/Styles/Colors.xaml
diff --git a/KanbanBoard/Resources/Styles/Styles.xaml b/Database/KanbanBoard/KanbanBoard/Resources/Styles/Styles.xaml
similarity index 100%
rename from KanbanBoard/Resources/Styles/Styles.xaml
rename to Database/KanbanBoard/KanbanBoard/Resources/Styles/Styles.xaml
diff --git a/Database/KanbanBoard/KanbanBoardDb/KanbanBoardDb.csproj b/Database/KanbanBoard/KanbanBoardDb/KanbanBoardDb.csproj
new file mode 100644
index 00000000..4941f06d
--- /dev/null
+++ b/Database/KanbanBoard/KanbanBoardDb/KanbanBoardDb.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net9.0
+
+ true
+ ..\KanbanBoard\KanbanBoard.csproj
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Database/KanbanBoard/KanbanBoardDb/KanbanBoardDbContext.cs b/Database/KanbanBoard/KanbanBoardDb/KanbanBoardDbContext.cs
new file mode 100644
index 00000000..265c20f6
--- /dev/null
+++ b/Database/KanbanBoard/KanbanBoardDb/KanbanBoardDbContext.cs
@@ -0,0 +1,23 @@
+namespace KanbanBoardDb;
+
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Diagnostics;
+
+public class KanbanBoardDbContext : DbContext
+{
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ optionsBuilder.UseSqlite($"Filename={Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "KanbanBoard.db")}")
+ .LogTo(_ => Console.WriteLine(">> EF is building the model..."), [CoreEventId.ShadowPropertyCreated])
+ .EnableSensitiveDataLogging(); ;
+ }
+
+ public DbSet Cards => Set();
+ public DbSet Columns => Set();
+
+ protected override void OnModelCreating(ModelBuilder builder)
+ {
+ base.OnModelCreating(builder);
+ builder.Entity().HasMany(x => x.Cards).WithOne(x => x.Column);
+ }
+}
\ No newline at end of file
diff --git a/KanbanBoard/Models/Card.cs b/Database/KanbanBoard/KanbanBoardDb/KanbanCard.cs
similarity index 67%
rename from KanbanBoard/Models/Card.cs
rename to Database/KanbanBoard/KanbanBoardDb/KanbanCard.cs
index 427904b0..27e3a30c 100644
--- a/KanbanBoard/Models/Card.cs
+++ b/Database/KanbanBoard/KanbanBoardDb/KanbanCard.cs
@@ -1,6 +1,6 @@
-namespace KanbanBoard.Models;
+namespace KanbanBoardDb;
-public sealed class Card
+public sealed class KanbanCard
{
public int Id { get; set; }
@@ -12,5 +12,5 @@ public sealed class Card
public int ColumnId { get; set; }
- public Column? Column { get; set; }
+ public KanbanColumn? Column { get; set; }
}
\ No newline at end of file
diff --git a/KanbanBoard/Models/Column.cs b/Database/KanbanBoard/KanbanBoardDb/KanbanColumn.cs
similarity index 60%
rename from KanbanBoard/Models/Column.cs
rename to Database/KanbanBoard/KanbanBoardDb/KanbanColumn.cs
index a55a9c9f..d7b1cdb1 100644
--- a/KanbanBoard/Models/Column.cs
+++ b/Database/KanbanBoard/KanbanBoardDb/KanbanColumn.cs
@@ -1,7 +1,8 @@
-namespace KanbanBoard.Models;
+namespace KanbanBoardDb;
+
using System.Collections.ObjectModel;
-public sealed class Column
+public sealed class KanbanColumn
{
public int Id { get; set; }
@@ -9,7 +10,7 @@ public sealed class Column
public int Wip { get; set; } = int.MaxValue;
- public ObservableCollection Cards { get; set; } = new();
+ public ObservableCollection Cards { get; set; } = new();
public int Order { get; set; }
}
\ No newline at end of file
diff --git a/Database/MauiTaskListApp/App.xaml.cs b/Database/MauiTaskListApp/App.xaml.cs
index a78fb116..cc0f2b43 100644
--- a/Database/MauiTaskListApp/App.xaml.cs
+++ b/Database/MauiTaskListApp/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/Database/MauiTaskListApp/MauiTaskListApp.csproj b/Database/MauiTaskListApp/MauiTaskListApp.csproj
index fde3e343..58eae1ba 100644
--- a/Database/MauiTaskListApp/MauiTaskListApp.csproj
+++ b/Database/MauiTaskListApp/MauiTaskListApp.csproj
@@ -30,9 +30,9 @@
-
-
-
+
+
+
diff --git a/Database/Sqlite/MauiSqlite/App.xaml.cs b/Database/Sqlite/MauiSqlite/App.xaml.cs
index ac9c0092..1be94e9d 100644
--- a/Database/Sqlite/MauiSqlite/App.xaml.cs
+++ b/Database/Sqlite/MauiSqlite/App.xaml.cs
@@ -3,10 +3,16 @@
public partial class App : Application
{
- public App(IServiceProvider serviceProvider)
+ private readonly MainPage mainPage;
+
+ public App(MainPage mainPage)
{
+ this.mainPage = mainPage;
InitializeComponent();
+ }
- MainPage = serviceProvider.GetRequiredService();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(mainPage);
}
}
\ No newline at end of file
diff --git a/Database/Sqlite/MauiSqlite/MauiProgram.cs b/Database/Sqlite/MauiSqlite/MauiProgram.cs
index fe3abcba..d58b15ba 100644
--- a/Database/Sqlite/MauiSqlite/MauiProgram.cs
+++ b/Database/Sqlite/MauiSqlite/MauiProgram.cs
@@ -8,7 +8,7 @@ public static MauiApp CreateMauiApp()
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp();
builder.Services.AddSingleton(new AccountRepository("accounts.db"));
- builder.Services.AddScoped();
+ builder.Services.AddSingleton();
return builder.Build();
}
diff --git a/Database/Sqlite/MauiSqlite/MauiSqlite.csproj b/Database/Sqlite/MauiSqlite/MauiSqlite.csproj
index 8b136517..659fb2dd 100644
--- a/Database/Sqlite/MauiSqlite/MauiSqlite.csproj
+++ b/Database/Sqlite/MauiSqlite/MauiSqlite.csproj
@@ -25,10 +25,10 @@
-
-
-
-
+
+
+
+
diff --git a/Database/Sqlite/MauiSqliteBlazor/App.xaml.cs b/Database/Sqlite/MauiSqliteBlazor/App.xaml.cs
index 798925df..b56df456 100644
--- a/Database/Sqlite/MauiSqliteBlazor/App.xaml.cs
+++ b/Database/Sqlite/MauiSqliteBlazor/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/Database/Sqlite/MauiSqliteBlazor/MauiSqliteBlazor.csproj b/Database/Sqlite/MauiSqliteBlazor/MauiSqliteBlazor.csproj
index dcb884a9..5e24d2ec 100644
--- a/Database/Sqlite/MauiSqliteBlazor/MauiSqliteBlazor.csproj
+++ b/Database/Sqlite/MauiSqliteBlazor/MauiSqliteBlazor.csproj
@@ -26,10 +26,10 @@
-
-
-
-
+
+
+
+
@@ -37,7 +37,7 @@
-
+
diff --git a/Directory.Build.props b/Directory.Build.props
index da0dacde..a4d94821 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -2,12 +2,12 @@
- true
+ false
true
- net8.0
+ net9.0
@@ -18,9 +18,11 @@
true
enable
true
- $(NoWarn);NU1603
+ $(NoWarn);NU1603;NU1902;NU1903
enable
+ true
+
16.0
16.0
23.0
@@ -67,7 +69,6 @@
-
-
+
\ No newline at end of file
diff --git a/DynamicFab/App.xaml.cs b/DynamicFab/App.xaml.cs
index dd7b8d7f..212188b6 100644
--- a/DynamicFab/App.xaml.cs
+++ b/DynamicFab/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/DynamicFab/DynamicFab.csproj b/DynamicFab/DynamicFab.csproj
index aaf63c81..8c6d527d 100644
--- a/DynamicFab/DynamicFab.csproj
+++ b/DynamicFab/DynamicFab.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/IPTVPlayer/App.xaml.cs b/IPTVPlayer/App.xaml.cs
index 50327e43..9144d06c 100644
--- a/IPTVPlayer/App.xaml.cs
+++ b/IPTVPlayer/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/IPTVPlayer/IPTVPlayer.csproj b/IPTVPlayer/IPTVPlayer.csproj
index 6f90c74b..d49a51a7 100644
--- a/IPTVPlayer/IPTVPlayer.csproj
+++ b/IPTVPlayer/IPTVPlayer.csproj
@@ -29,11 +29,11 @@
-
+
-
-
-
+
+
+
diff --git a/KanbanBoard/Models/CardInfo.cs b/KanbanBoard/Models/CardInfo.cs
deleted file mode 100644
index 03d8d4e4..00000000
--- a/KanbanBoard/Models/CardInfo.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace KanbanBoard.Models;
-
-using CommunityToolkit.Mvvm.ComponentModel;
-
-public partial class CardInfo(Card card) : ObservableObject
-{
- [ObservableProperty]
- private bool isDragOver;
-
- public Card Card { get; } = card;
-}
\ No newline at end of file
diff --git a/KanbanBoard/Models/ColumnInfo.cs b/KanbanBoard/Models/ColumnInfo.cs
deleted file mode 100644
index 281d7bc2..00000000
--- a/KanbanBoard/Models/ColumnInfo.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace KanbanBoard.Models;
-
-using System.Collections.ObjectModel;
-
-public class ColumnInfo(int index, Column column)
-{
- public Column Column { get; } = column;
- public ObservableCollection Cards { get; } = column.Cards.Select(x => new CardInfo(x)).ToObservableCollection();
- public int Index { get; } = index;
-
- public bool IsWipReached => Column.Cards.Count >= Column.Wip;
-}
\ No newline at end of file
diff --git a/KanbanBoard/Models/KanbanBoardDbContext.cs b/KanbanBoard/Models/KanbanBoardDbContext.cs
deleted file mode 100644
index 4286ba8f..00000000
--- a/KanbanBoard/Models/KanbanBoardDbContext.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace KanbanBoard.Models;
-
-using Microsoft.EntityFrameworkCore;
-
-public class KanbanBoardDbContext : DbContext
-{
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseModel(KanbanBoardDbContextModel.Instance);
- optionsBuilder.UseSqlite($"Filename={Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "KanbanBoard.db")}");
- }
-
- public DbSet Cards => Set();
- public DbSet Columns => Set();
-
- protected override void OnModelCreating(ModelBuilder builder)
- {
- base.OnModelCreating(builder);
- builder.Entity().HasMany(x => x.Cards).WithOne(x => x.Column);
- }
-}
\ No newline at end of file
diff --git a/KanbanBoard/Models/Optimized/CardEntityType.cs b/KanbanBoard/Models/Optimized/CardEntityType.cs
deleted file mode 100644
index 61b0881c..00000000
--- a/KanbanBoard/Models/Optimized/CardEntityType.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-//
-using System;
-using System.Collections.ObjectModel;
-using System.Reflection;
-using KanbanBoard.Models;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.ChangeTracking;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal;
-using Microsoft.EntityFrameworkCore.Storage;
-
-#pragma warning disable 219, 612, 618
-#nullable disable
-
-namespace KanbanBoard
-{
- internal partial class CardEntityType
- {
- public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
- {
- var runtimeEntityType = model.AddEntityType(
- "KanbanBoard.Models.Card",
- typeof(Card),
- baseEntityType);
-
- var id = runtimeEntityType.AddProperty(
- "Id",
- typeof(int),
- propertyInfo: typeof(Card).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Card).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- valueGenerated: ValueGenerated.OnAdd,
- afterSaveBehavior: PropertySaveBehavior.Throw,
- sentinel: 0);
- id.TypeMapping = IntTypeMapping.Default.Clone(
- comparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- keyComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- providerValueComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- mappingInfo: new RelationalTypeMappingInfo(
- storeTypeName: "INTEGER"));
-
- var columnId = runtimeEntityType.AddProperty(
- "ColumnId",
- typeof(int),
- propertyInfo: typeof(Card).GetProperty("ColumnId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Card).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- sentinel: 0);
- columnId.TypeMapping = IntTypeMapping.Default.Clone(
- comparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- keyComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- providerValueComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- mappingInfo: new RelationalTypeMappingInfo(
- storeTypeName: "INTEGER"));
-
- var description = runtimeEntityType.AddProperty(
- "Description",
- typeof(string),
- propertyInfo: typeof(Card).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Card).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
- description.TypeMapping = SqliteStringTypeMapping.Default;
-
- var name = runtimeEntityType.AddProperty(
- "Name",
- typeof(string),
- propertyInfo: typeof(Card).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Card).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
- name.TypeMapping = SqliteStringTypeMapping.Default;
-
- var order = runtimeEntityType.AddProperty(
- "Order",
- typeof(int),
- propertyInfo: typeof(Card).GetProperty("Order", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Card).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- sentinel: 0);
- order.TypeMapping = IntTypeMapping.Default.Clone(
- comparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- keyComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- providerValueComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- mappingInfo: new RelationalTypeMappingInfo(
- storeTypeName: "INTEGER"));
-
- var key = runtimeEntityType.AddKey(
- new[] { id });
- runtimeEntityType.SetPrimaryKey(key);
-
- var index = runtimeEntityType.AddIndex(
- new[] { columnId });
-
- return runtimeEntityType;
- }
-
- public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType)
- {
- var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("ColumnId") },
- principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }),
- principalEntityType,
- deleteBehavior: DeleteBehavior.Cascade,
- required: true);
-
- var column = declaringEntityType.AddNavigation("Column",
- runtimeForeignKey,
- onDependent: true,
- typeof(Column),
- propertyInfo: typeof(Card).GetProperty("Column", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Card).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
-
- var cards = principalEntityType.AddNavigation("Cards",
- runtimeForeignKey,
- onDependent: false,
- typeof(ObservableCollection),
- propertyInfo: typeof(Column).GetProperty("Cards", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Column).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
-
- return runtimeForeignKey;
- }
-
- public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
- {
- runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
- runtimeEntityType.AddAnnotation("Relational:Schema", null);
- runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
- runtimeEntityType.AddAnnotation("Relational:TableName", "Cards");
- runtimeEntityType.AddAnnotation("Relational:ViewName", null);
- runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
-
- Customize(runtimeEntityType);
- }
-
- static partial void Customize(RuntimeEntityType runtimeEntityType);
- }
-}
diff --git a/KanbanBoard/Models/Optimized/ColumnEntityType.cs b/KanbanBoard/Models/Optimized/ColumnEntityType.cs
deleted file mode 100644
index 2de27ceb..00000000
--- a/KanbanBoard/Models/Optimized/ColumnEntityType.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-using System;
-using System.Reflection;
-using KanbanBoard.Models;
-using Microsoft.EntityFrameworkCore.ChangeTracking;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal;
-using Microsoft.EntityFrameworkCore.Storage;
-
-#pragma warning disable 219, 612, 618
-#nullable disable
-
-namespace KanbanBoard
-{
- internal partial class ColumnEntityType
- {
- public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
- {
- var runtimeEntityType = model.AddEntityType(
- "KanbanBoard.Models.Column",
- typeof(Column),
- baseEntityType);
-
- var id = runtimeEntityType.AddProperty(
- "Id",
- typeof(int),
- propertyInfo: typeof(Column).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Column).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- valueGenerated: ValueGenerated.OnAdd,
- afterSaveBehavior: PropertySaveBehavior.Throw,
- sentinel: 0);
- id.TypeMapping = IntTypeMapping.Default.Clone(
- comparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- keyComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- providerValueComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- mappingInfo: new RelationalTypeMappingInfo(
- storeTypeName: "INTEGER"));
-
- var name = runtimeEntityType.AddProperty(
- "Name",
- typeof(string),
- propertyInfo: typeof(Column).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Column).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
- name.TypeMapping = SqliteStringTypeMapping.Default;
-
- var order = runtimeEntityType.AddProperty(
- "Order",
- typeof(int),
- propertyInfo: typeof(Column).GetProperty("Order", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Column).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- sentinel: 0);
- order.TypeMapping = IntTypeMapping.Default.Clone(
- comparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- keyComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- providerValueComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- mappingInfo: new RelationalTypeMappingInfo(
- storeTypeName: "INTEGER"));
-
- var wip = runtimeEntityType.AddProperty(
- "Wip",
- typeof(int),
- propertyInfo: typeof(Column).GetProperty("Wip", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- fieldInfo: typeof(Column).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
- sentinel: 0);
- wip.TypeMapping = IntTypeMapping.Default.Clone(
- comparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- keyComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- providerValueComparer: new ValueComparer(
- (int v1, int v2) => v1 == v2,
- (int v) => v,
- (int v) => v),
- mappingInfo: new RelationalTypeMappingInfo(
- storeTypeName: "INTEGER"));
-
- var key = runtimeEntityType.AddKey(
- new[] { id });
- runtimeEntityType.SetPrimaryKey(key);
-
- return runtimeEntityType;
- }
-
- public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
- {
- runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
- runtimeEntityType.AddAnnotation("Relational:Schema", null);
- runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
- runtimeEntityType.AddAnnotation("Relational:TableName", "Columns");
- runtimeEntityType.AddAnnotation("Relational:ViewName", null);
- runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
-
- Customize(runtimeEntityType);
- }
-
- static partial void Customize(RuntimeEntityType runtimeEntityType);
- }
-}
diff --git a/KanbanBoard/Models/Optimized/KanbanBoardDbContextModel.cs b/KanbanBoard/Models/Optimized/KanbanBoardDbContextModel.cs
deleted file mode 100644
index 2541e549..00000000
--- a/KanbanBoard/Models/Optimized/KanbanBoardDbContextModel.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-using KanbanBoard.Models;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-
-#pragma warning disable 219, 612, 618
-#nullable disable
-
-namespace KanbanBoard
-{
- [DbContext(typeof(KanbanBoardDbContext))]
- public partial class KanbanBoardDbContextModel : RuntimeModel
- {
- private static readonly bool _useOldBehavior31751 =
- System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751;
-
- static KanbanBoardDbContextModel()
- {
- var model = new KanbanBoardDbContextModel();
-
- if (_useOldBehavior31751)
- {
- model.Initialize();
- }
- else
- {
- var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024);
- thread.Start();
- thread.Join();
-
- void RunInitialization()
- {
- model.Initialize();
- }
- }
-
- model.Customize();
- _instance = model;
- }
-
- private static KanbanBoardDbContextModel _instance;
- public static IModel Instance => _instance;
-
- partial void Initialize();
-
- partial void Customize();
- }
-}
diff --git a/KanbanBoard/Models/Optimized/KanbanBoardDbContextModelBuilder.cs b/KanbanBoard/Models/Optimized/KanbanBoardDbContextModelBuilder.cs
deleted file mode 100644
index cf611e10..00000000
--- a/KanbanBoard/Models/Optimized/KanbanBoardDbContextModelBuilder.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-//
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Metadata.Internal;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#pragma warning disable 219, 612, 618
-#nullable disable
-
-namespace KanbanBoard
-{
- public partial class KanbanBoardDbContextModel
- {
- partial void Initialize()
- {
- var card = CardEntityType.Create(this);
- var column = ColumnEntityType.Create(this);
-
- CardEntityType.CreateForeignKey1(card, column);
-
- CardEntityType.CreateAnnotations(card);
- ColumnEntityType.CreateAnnotations(column);
-
- AddAnnotation("ProductVersion", "8.0.2");
- AddRuntimeAnnotation("Relational:RelationalModel", CreateRelationalModel());
- }
-
- private IRelationalModel CreateRelationalModel()
- {
- var relationalModel = new RelationalModel(this);
-
- var card = FindEntityType("KanbanBoard.Models.Card")!;
-
- var defaultTableMappings = new List>();
- card.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings);
- var kanbanBoardModelsCardTableBase = new TableBase("KanbanBoard.Models.Card", null, relationalModel);
- var columnIdColumnBase = new ColumnBase("ColumnId", "INTEGER", kanbanBoardModelsCardTableBase);
- kanbanBoardModelsCardTableBase.Columns.Add("ColumnId", columnIdColumnBase);
- var descriptionColumnBase = new ColumnBase("Description", "TEXT", kanbanBoardModelsCardTableBase);
- kanbanBoardModelsCardTableBase.Columns.Add("Description", descriptionColumnBase);
- var idColumnBase = new ColumnBase("Id", "INTEGER", kanbanBoardModelsCardTableBase);
- kanbanBoardModelsCardTableBase.Columns.Add("Id", idColumnBase);
- var nameColumnBase = new ColumnBase("Name", "TEXT", kanbanBoardModelsCardTableBase);
- kanbanBoardModelsCardTableBase.Columns.Add("Name", nameColumnBase);
- var orderColumnBase = new ColumnBase("Order", "INTEGER", kanbanBoardModelsCardTableBase);
- kanbanBoardModelsCardTableBase.Columns.Add("Order", orderColumnBase);
- relationalModel.DefaultTables.Add("KanbanBoard.Models.Card", kanbanBoardModelsCardTableBase);
- var kanbanBoardModelsCardMappingBase = new TableMappingBase(card, kanbanBoardModelsCardTableBase, true);
- kanbanBoardModelsCardTableBase.AddTypeMapping(kanbanBoardModelsCardMappingBase, false);
- defaultTableMappings.Add(kanbanBoardModelsCardMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, card.FindProperty("Id")!, kanbanBoardModelsCardMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)columnIdColumnBase, card.FindProperty("ColumnId")!, kanbanBoardModelsCardMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)descriptionColumnBase, card.FindProperty("Description")!, kanbanBoardModelsCardMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)nameColumnBase, card.FindProperty("Name")!, kanbanBoardModelsCardMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)orderColumnBase, card.FindProperty("Order")!, kanbanBoardModelsCardMappingBase);
-
- var tableMappings = new List();
- card.SetRuntimeAnnotation("Relational:TableMappings", tableMappings);
- var cardsTable = new Table("Cards", null, relationalModel);
- var idColumn = new Column("Id", "INTEGER", cardsTable);
- cardsTable.Columns.Add("Id", idColumn);
- var columnIdColumn = new Column("ColumnId", "INTEGER", cardsTable);
- cardsTable.Columns.Add("ColumnId", columnIdColumn);
- var descriptionColumn = new Column("Description", "TEXT", cardsTable);
- cardsTable.Columns.Add("Description", descriptionColumn);
- var nameColumn = new Column("Name", "TEXT", cardsTable);
- cardsTable.Columns.Add("Name", nameColumn);
- var orderColumn = new Column("Order", "INTEGER", cardsTable);
- cardsTable.Columns.Add("Order", orderColumn);
- var pK_Cards = new UniqueConstraint("PK_Cards", cardsTable, new[] { idColumn });
- cardsTable.PrimaryKey = pK_Cards;
- var pK_CardsUc = RelationalModel.GetKey(this,
- "KanbanBoard.Models.Card",
- new[] { "Id" });
- pK_Cards.MappedKeys.Add(pK_CardsUc);
- RelationalModel.GetOrCreateUniqueConstraints(pK_CardsUc).Add(pK_Cards);
- cardsTable.UniqueConstraints.Add("PK_Cards", pK_Cards);
- var iX_Cards_ColumnId = new TableIndex(
- "IX_Cards_ColumnId", cardsTable, new[] { columnIdColumn }, false);
- var iX_Cards_ColumnIdIx = RelationalModel.GetIndex(this,
- "KanbanBoard.Models.Card",
- new[] { "ColumnId" });
- iX_Cards_ColumnId.MappedIndexes.Add(iX_Cards_ColumnIdIx);
- RelationalModel.GetOrCreateTableIndexes(iX_Cards_ColumnIdIx).Add(iX_Cards_ColumnId);
- cardsTable.Indexes.Add("IX_Cards_ColumnId", iX_Cards_ColumnId);
- relationalModel.Tables.Add(("Cards", null), cardsTable);
- var cardsTableMapping = new TableMapping(card, cardsTable, true);
- cardsTable.AddTypeMapping(cardsTableMapping, false);
- tableMappings.Add(cardsTableMapping);
- RelationalModel.CreateColumnMapping(idColumn, card.FindProperty("Id")!, cardsTableMapping);
- RelationalModel.CreateColumnMapping(columnIdColumn, card.FindProperty("ColumnId")!, cardsTableMapping);
- RelationalModel.CreateColumnMapping(descriptionColumn, card.FindProperty("Description")!, cardsTableMapping);
- RelationalModel.CreateColumnMapping(nameColumn, card.FindProperty("Name")!, cardsTableMapping);
- RelationalModel.CreateColumnMapping(orderColumn, card.FindProperty("Order")!, cardsTableMapping);
-
- var column = FindEntityType("KanbanBoard.Models.Column")!;
-
- var defaultTableMappings0 = new List>();
- column.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings0);
- var kanbanBoardModelsColumnTableBase = new TableBase("KanbanBoard.Models.Column", null, relationalModel);
- var idColumnBase0 = new ColumnBase("Id", "INTEGER", kanbanBoardModelsColumnTableBase);
- kanbanBoardModelsColumnTableBase.Columns.Add("Id", idColumnBase0);
- var nameColumnBase0 = new ColumnBase("Name", "TEXT", kanbanBoardModelsColumnTableBase);
- kanbanBoardModelsColumnTableBase.Columns.Add("Name", nameColumnBase0);
- var orderColumnBase0 = new ColumnBase("Order", "INTEGER", kanbanBoardModelsColumnTableBase);
- kanbanBoardModelsColumnTableBase.Columns.Add("Order", orderColumnBase0);
- var wipColumnBase = new ColumnBase("Wip", "INTEGER", kanbanBoardModelsColumnTableBase);
- kanbanBoardModelsColumnTableBase.Columns.Add("Wip", wipColumnBase);
- relationalModel.DefaultTables.Add("KanbanBoard.Models.Column", kanbanBoardModelsColumnTableBase);
- var kanbanBoardModelsColumnMappingBase = new TableMappingBase(column, kanbanBoardModelsColumnTableBase, true);
- kanbanBoardModelsColumnTableBase.AddTypeMapping(kanbanBoardModelsColumnMappingBase, false);
- defaultTableMappings0.Add(kanbanBoardModelsColumnMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase0, column.FindProperty("Id")!, kanbanBoardModelsColumnMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)nameColumnBase0, column.FindProperty("Name")!, kanbanBoardModelsColumnMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)orderColumnBase0, column.FindProperty("Order")!, kanbanBoardModelsColumnMappingBase);
- RelationalModel.CreateColumnMapping((ColumnBase)wipColumnBase, column.FindProperty("Wip")!, kanbanBoardModelsColumnMappingBase);
-
- var tableMappings0 = new List();
- column.SetRuntimeAnnotation("Relational:TableMappings", tableMappings0);
- var columnsTable = new Table("Columns", null, relationalModel);
- var idColumn0 = new Column("Id", "INTEGER", columnsTable);
- columnsTable.Columns.Add("Id", idColumn0);
- var nameColumn0 = new Column("Name", "TEXT", columnsTable);
- columnsTable.Columns.Add("Name", nameColumn0);
- var orderColumn0 = new Column("Order", "INTEGER", columnsTable);
- columnsTable.Columns.Add("Order", orderColumn0);
- var wipColumn = new Column("Wip", "INTEGER", columnsTable);
- columnsTable.Columns.Add("Wip", wipColumn);
- var pK_Columns = new UniqueConstraint("PK_Columns", columnsTable, new[] { idColumn0 });
- columnsTable.PrimaryKey = pK_Columns;
- var pK_ColumnsUc = RelationalModel.GetKey(this,
- "KanbanBoard.Models.Column",
- new[] { "Id" });
- pK_Columns.MappedKeys.Add(pK_ColumnsUc);
- RelationalModel.GetOrCreateUniqueConstraints(pK_ColumnsUc).Add(pK_Columns);
- columnsTable.UniqueConstraints.Add("PK_Columns", pK_Columns);
- relationalModel.Tables.Add(("Columns", null), columnsTable);
- var columnsTableMapping = new TableMapping(column, columnsTable, true);
- columnsTable.AddTypeMapping(columnsTableMapping, false);
- tableMappings0.Add(columnsTableMapping);
- RelationalModel.CreateColumnMapping(idColumn0, column.FindProperty("Id")!, columnsTableMapping);
- RelationalModel.CreateColumnMapping(nameColumn0, column.FindProperty("Name")!, columnsTableMapping);
- RelationalModel.CreateColumnMapping(orderColumn0, column.FindProperty("Order")!, columnsTableMapping);
- RelationalModel.CreateColumnMapping(wipColumn, column.FindProperty("Wip")!, columnsTableMapping);
- var fK_Cards_Columns_ColumnId = new ForeignKeyConstraint(
- "FK_Cards_Columns_ColumnId", cardsTable, columnsTable,
- new[] { columnIdColumn },
- columnsTable.FindUniqueConstraint("PK_Columns")!, ReferentialAction.Cascade);
- var fK_Cards_Columns_ColumnIdFk = RelationalModel.GetForeignKey(this,
- "KanbanBoard.Models.Card",
- new[] { "ColumnId" },
- "KanbanBoard.Models.Column",
- new[] { "Id" });
- fK_Cards_Columns_ColumnId.MappedForeignKeys.Add(fK_Cards_Columns_ColumnIdFk);
- RelationalModel.GetOrCreateForeignKeyConstraints(fK_Cards_Columns_ColumnIdFk).Add(fK_Cards_Columns_ColumnId);
- cardsTable.ForeignKeyConstraints.Add(fK_Cards_Columns_ColumnId);
- columnsTable.ReferencingForeignKeyConstraints.Add(fK_Cards_Columns_ColumnId);
- return relationalModel.MakeReadOnly();
- }
- }
-}
diff --git a/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.1.nupkg b/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.1.nupkg
new file mode 100644
index 00000000..5442d418
Binary files /dev/null and b/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.1.nupkg differ
diff --git a/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.nupkg b/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.nupkg
index fe8501ea..d8581d36 100644
Binary files a/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.nupkg and b/LocalPackages/VladislavAntonyuk.Balloon.1.6.4.nupkg differ
diff --git a/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.1.nupkg b/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.1.nupkg
new file mode 100644
index 00000000..41cee47b
Binary files /dev/null and b/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.1.nupkg differ
diff --git a/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.nupkg b/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.nupkg
index 0ffdca51..c1629613 100644
Binary files a/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.nupkg and b/LocalPackages/VladislavAntonyuk.MaterialCalendarView.1.9.0.nupkg differ
diff --git a/MauiAnimation/App.xaml.cs b/MauiAnimation/App.xaml.cs
index a0dff877..478a001a 100644
--- a/MauiAnimation/App.xaml.cs
+++ b/MauiAnimation/App.xaml.cs
@@ -5,9 +5,13 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
if (DeviceInfo.Idiom == DeviceIdiom.Phone)
{
- MainPage = new ContentPage
+ return new Window(new ContentPage
{
Content = new Label
{
@@ -15,11 +19,9 @@ public App()
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
}
- };
- }
- else
- {
- MainPage = new AppShell();
+ });
}
+
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiAnimation/MauiAnimation.csproj b/MauiAnimation/MauiAnimation.csproj
index bf4a8e35..4f9c61f6 100644
--- a/MauiAnimation/MauiAnimation.csproj
+++ b/MauiAnimation/MauiAnimation.csproj
@@ -27,7 +27,7 @@
-
+
diff --git a/MauiApplicationInsights/App.xaml.cs b/MauiApplicationInsights/App.xaml.cs
index 25f57a24..3291f040 100644
--- a/MauiApplicationInsights/App.xaml.cs
+++ b/MauiApplicationInsights/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiBadge/App.xaml.cs b/MauiBadge/App.xaml.cs
index 61b29a9f..fde9a3f8 100644
--- a/MauiBadge/App.xaml.cs
+++ b/MauiBadge/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiBank/App.xaml.cs b/MauiBank/App.xaml.cs
index 542d8165..e92ff9c4 100644
--- a/MauiBank/App.xaml.cs
+++ b/MauiBank/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiBank/Converters/BoolToColorConverter.cs b/MauiBank/Converters/BoolToColorConverter.cs
index 7c3d3824..dc44f046 100644
--- a/MauiBank/Converters/BoolToColorConverter.cs
+++ b/MauiBank/Converters/BoolToColorConverter.cs
@@ -2,6 +2,7 @@
using System.Globalization;
+[AcceptEmptyServiceProvider]
public class BoolToColorConverter : IValueConverter
{
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
diff --git a/MauiBank/Converters/BoolToStrokeThicknessConverter.cs b/MauiBank/Converters/BoolToStrokeThicknessConverter.cs
index 6096cdcc..f49a387f 100644
--- a/MauiBank/Converters/BoolToStrokeThicknessConverter.cs
+++ b/MauiBank/Converters/BoolToStrokeThicknessConverter.cs
@@ -2,6 +2,7 @@
using System.Globalization;
+[AcceptEmptyServiceProvider]
public class BoolToStrokeThicknessConverter : IValueConverter
{
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
diff --git a/MauiBank/Converters/StringLengthToColorConverter.cs b/MauiBank/Converters/StringLengthToColorConverter.cs
index b39ad384..dc1a21fa 100644
--- a/MauiBank/Converters/StringLengthToColorConverter.cs
+++ b/MauiBank/Converters/StringLengthToColorConverter.cs
@@ -2,6 +2,7 @@
using System.Globalization;
+[AcceptEmptyServiceProvider]
public class StringLengthToColorConverter : IValueConverter
{
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
diff --git a/MauiBank/MauiBank.csproj b/MauiBank/MauiBank.csproj
index 965755ea..6f889734 100644
--- a/MauiBank/MauiBank.csproj
+++ b/MauiBank/MauiBank.csproj
@@ -32,8 +32,8 @@
-
-
+
+
diff --git a/MauiBank/ViewModels/CardPageViewModel.cs b/MauiBank/ViewModels/CardPageViewModel.cs
index ed608ce1..5e2320d8 100644
--- a/MauiBank/ViewModels/CardPageViewModel.cs
+++ b/MauiBank/ViewModels/CardPageViewModel.cs
@@ -49,12 +49,12 @@ public CardPageViewModel()
[RelayCommand]
Task More()
{
- return GetMainPage().GoToAsync("//home/profile", true);
- }
+ var page = Application.Current?.Windows.LastOrDefault()?.Page as AppShell;
+ if (page is null)
+ {
+ return Task.CompletedTask;
+ }
- AppShell GetMainPage()
- {
- ArgumentNullException.ThrowIfNull(Application.Current?.MainPage);
- return (AppShell)Application.Current.MainPage;
+ return page.GoToAsync("//home/profile", true);
}
}
\ No newline at end of file
diff --git a/MauiBank/ViewModels/PinPageViewModel.cs b/MauiBank/ViewModels/PinPageViewModel.cs
index 0f557370..976bb52c 100644
--- a/MauiBank/ViewModels/PinPageViewModel.cs
+++ b/MauiBank/ViewModels/PinPageViewModel.cs
@@ -94,7 +94,12 @@ async Task ForgotPasswordButtonClicked()
AppShell GetMainPage()
{
- ArgumentNullException.ThrowIfNull(Application.Current?.MainPage);
- return (AppShell)Application.Current.MainPage;
+ var page = Application.Current?.Windows.LastOrDefault()?.Page as AppShell;
+ if (page is null)
+ {
+ ArgumentNullException.ThrowIfNull(page);
+ }
+
+ return page;
}
}
\ No newline at end of file
diff --git a/MauiBank/ViewModels/ProfilePageViewModel.cs b/MauiBank/ViewModels/ProfilePageViewModel.cs
index 162c4875..91b9a9b1 100644
--- a/MauiBank/ViewModels/ProfilePageViewModel.cs
+++ b/MauiBank/ViewModels/ProfilePageViewModel.cs
@@ -13,7 +13,12 @@ Task Back()
AppShell GetMainPage()
{
- ArgumentNullException.ThrowIfNull(Application.Current?.MainPage);
- return (AppShell)Application.Current.MainPage;
+ var page = Application.Current?.Windows.LastOrDefault()?.Page as AppShell;
+ if (page is null)
+ {
+ ArgumentNullException.ThrowIfNull(page);
+ }
+
+ return page;
}
}
\ No newline at end of file
diff --git a/MauiBarcode/App.xaml.cs b/MauiBarcode/App.xaml.cs
index 132ff99f..4267e7ce 100644
--- a/MauiBarcode/App.xaml.cs
+++ b/MauiBarcode/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
- }
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
+ }
}
\ No newline at end of file
diff --git a/MauiBarcode/CommunityToolkitCameraPage.xaml.cs b/MauiBarcode/CommunityToolkitCameraPage.xaml.cs
index cb309fc1..5a94ea80 100644
--- a/MauiBarcode/CommunityToolkitCameraPage.xaml.cs
+++ b/MauiBarcode/CommunityToolkitCameraPage.xaml.cs
@@ -27,6 +27,7 @@ public CommunityToolkitCameraPage()
InitializeComponent();
}
+#if !TIZEN
protected override async void OnAppearing()
{
base.OnAppearing();
@@ -56,20 +57,25 @@ await MainThread.InvokeOnMainThreadAsync(async () =>
await Toast.Make(result.Text, ToastDuration.Long).Show();
});
}
+#endif
private async void StartButton_OnClicked(object? sender, EventArgs e)
{
- await ToolkitCameraView.StartCameraPreview(CancellationToken.None);
timer = new(TimeSpan.FromMilliseconds(3000));
+#if !TIZEN
+ await ToolkitCameraView.StartCameraPreview(CancellationToken.None);
while (await timer.WaitForNextTickAsync())
{
await ToolkitCameraView.CaptureImage(CancellationToken.None);
}
+#endif
}
private void StopButton_OnClicked(object? sender, EventArgs e)
{
timer.Dispose();
+#if !TIZEN
ToolkitCameraView.StopCameraPreview();
+#endif
}
}
\ No newline at end of file
diff --git a/MauiBarcode/MauiBarcode.csproj b/MauiBarcode/MauiBarcode.csproj
index bbd7fcd1..ea463ae0 100644
--- a/MauiBarcode/MauiBarcode.csproj
+++ b/MauiBarcode/MauiBarcode.csproj
@@ -25,14 +25,14 @@
-
+
-
-
+
+
diff --git a/MauiBells/App.xaml.cs b/MauiBells/App.xaml.cs
index ef7a2310..52808767 100644
--- a/MauiBells/App.xaml.cs
+++ b/MauiBells/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/MauiBells/MainPage.xaml.cs b/MauiBells/MainPage.xaml.cs
index c65cf9ea..3df948a9 100644
--- a/MauiBells/MainPage.xaml.cs
+++ b/MauiBells/MainPage.xaml.cs
@@ -67,7 +67,6 @@ private void ShakeDetected(object? sender, EventArgs e)
public void Dispose()
{
- CalendarView.Handler?.DisconnectHandler();
Accelerometer.Default.ShakeDetected -= ShakeDetected;
Accelerometer.Default.ReadingChanged -= ReadingChanged;
Accelerometer.Default.Stop();
diff --git a/MauiBells/MauiBells.csproj b/MauiBells/MauiBells.csproj
index 08308189..d62d7936 100644
--- a/MauiBells/MauiBells.csproj
+++ b/MauiBells/MauiBells.csproj
@@ -31,7 +31,7 @@
-
+
diff --git a/MauiBlazorPhotoGallery/App.xaml.cs b/MauiBlazorPhotoGallery/App.xaml.cs
index dc702edf..7eae9979 100644
--- a/MauiBlazorPhotoGallery/App.xaml.cs
+++ b/MauiBlazorPhotoGallery/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/MauiBlazorPhotoGallery/MauiBlazorPhotoGallery.csproj b/MauiBlazorPhotoGallery/MauiBlazorPhotoGallery.csproj
index 81ba4178..e0b2b9cf 100644
--- a/MauiBlazorPhotoGallery/MauiBlazorPhotoGallery.csproj
+++ b/MauiBlazorPhotoGallery/MauiBlazorPhotoGallery.csproj
@@ -30,7 +30,7 @@
-
+
diff --git a/MauiBluetooth/App.xaml.cs b/MauiBluetooth/App.xaml.cs
index 1821501e..22264148 100644
--- a/MauiBluetooth/App.xaml.cs
+++ b/MauiBluetooth/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiBluetooth/MainPage.xaml.cs b/MauiBluetooth/MainPage.xaml.cs
index ff4bce8b..078fa317 100644
--- a/MauiBluetooth/MainPage.xaml.cs
+++ b/MauiBluetooth/MainPage.xaml.cs
@@ -46,10 +46,14 @@ async Task Connect(IDevice device, CancellationToken cancellationToken)
try
{
await adapter.ConnectToDeviceAsync(device, cancellationToken: cancellationToken);
- if (Application.Current?.MainPage != null)
+ var page = Application.Current?.Windows.LastOrDefault()?.Page;
+ if (page is null)
{
- await Application.Current.MainPage.ShowPopupAsync(new DetailsPage(device, bluetoothService));
+ ArgumentNullException.ThrowIfNull(page);
}
+
+ await page.ShowPopupAsync(new DetailsPage(device, bluetoothService), token: cancellationToken);
+
}
catch (DeviceConnectionException e)
{
diff --git a/MauiBluetooth/MauiBluetooth.csproj b/MauiBluetooth/MauiBluetooth.csproj
index 6338dbc1..fdbb5eea 100644
--- a/MauiBluetooth/MauiBluetooth.csproj
+++ b/MauiBluetooth/MauiBluetooth.csproj
@@ -26,8 +26,8 @@
-
-
+
+
diff --git a/MauiBluetooth/Platforms/Android/BluetoothService.cs b/MauiBluetooth/Platforms/Android/BluetoothService.cs
index f87a01b9..68432c82 100644
--- a/MauiBluetooth/Platforms/Android/BluetoothService.cs
+++ b/MauiBluetooth/Platforms/Android/BluetoothService.cs
@@ -93,7 +93,7 @@ public async Task Receive(string deviceName)
}
byte[] content = new byte[1024];
- await socket.InputStream.ReadAsync(content, 0, content.Length);
+ await socket.InputStream.ReadExactlyAsync(content, 0, content.Length);
return content;
}
diff --git a/MauiCaptcha/App.xaml.cs b/MauiCaptcha/App.xaml.cs
index 5abe514e..288f1db6 100644
--- a/MauiCaptcha/App.xaml.cs
+++ b/MauiCaptcha/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/MauiCaptcha/MauiCaptcha.csproj b/MauiCaptcha/MauiCaptcha.csproj
index 139c14d7..c6c9bb75 100644
--- a/MauiCaptcha/MauiCaptcha.csproj
+++ b/MauiCaptcha/MauiCaptcha.csproj
@@ -32,11 +32,11 @@
-
+
-
+
diff --git a/MauiCursor/App.xaml.cs b/MauiCursor/App.xaml.cs
index b2a19251..40f91c4d 100644
--- a/MauiCursor/App.xaml.cs
+++ b/MauiCursor/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiCursor/CursorBehavior.cs b/MauiCursor/CursorBehavior.cs
index e3aebc1e..bf642819 100644
--- a/MauiCursor/CursorBehavior.cs
+++ b/MauiCursor/CursorBehavior.cs
@@ -8,7 +8,7 @@ private static void CursorChanged(BindableObject bindable, object oldvalue, obje
{
if (bindable is VisualElement visualElement)
{
- visualElement.SetCustomCursor((CursorIcon)newvalue, Application.Current?.MainPage?.Handler?.MauiContext);
+ visualElement.SetCustomCursor((CursorIcon)newvalue, visualElement.Handler?.MauiContext ?? Application.Current?.Windows.LastOrDefault()?.Page?.Handler?.MauiContext);
}
}
diff --git a/MauiCursor/MauiCursor.csproj b/MauiCursor/MauiCursor.csproj
index 50482555..3eeb26a2 100644
--- a/MauiCursor/MauiCursor.csproj
+++ b/MauiCursor/MauiCursor.csproj
@@ -1,7 +1,7 @@
- Exe
+ Exe
MauiCursor
diff --git a/MauiCursor/Platforms/iOS/CursorExtensions.cs b/MauiCursor/Platforms/iOS/CursorExtensions.cs
index 00378ec7..ad6e6ad6 100644
--- a/MauiCursor/Platforms/iOS/CursorExtensions.cs
+++ b/MauiCursor/Platforms/iOS/CursorExtensions.cs
@@ -1,7 +1,7 @@
namespace MauiCursor;
+using CoreGraphics;
using Microsoft.Maui.Controls;
-using Microsoft.Maui.Controls.Compatibility.Platform.iOS;
using Microsoft.Maui.Controls.Shapes;
using Microsoft.Maui.Platform;
using UIKit;
@@ -18,20 +18,151 @@ public static void SetCustomCursor(this VisualElement visualElement, CursorIcon
view.RemoveInteraction(interaction);
}
- view.AddInteraction(new UIPointerInteraction(new PointerInteractionDelegate(cursor)));
+ view.AddInteraction(new UIPointerInteraction(new PointerInteractionDelegate()));
}
- class PointerInteractionDelegate(CursorIcon icon) : UIPointerInteractionDelegate
+ class PointerInteractionDelegate : UIPointerInteractionDelegate
{
- private readonly CursorIcon icon = icon;
-
- public override UIPointerStyle? GetStyleForRegion(UIPointerInteraction interaction, UIPointerRegion region)
+ public override UIPointerStyle GetStyleForRegion(UIPointerInteraction interaction, UIPointerRegion region)
{
- if (interaction.View == null) { return null; }
string pathData = "M14.9263942,24.822524 C15.7714904,24.822524 16.3700962,24.0948077 16.804375,22.9680048 L24.4925481,2.88509615 C24.7038462,2.34516827 24.8211538,1.86391827 24.8211538,1.46485577 C24.8211538,0.701899038 24.3516827,0.232403846 23.5887019,0.232403846 C23.1896635,0.232403846 22.7084135,0.349783654 22.1685096,0.561057692 L1.97987981,8.29608173 C0.993942308,8.67168269 0.230995192,9.2703125 0.230995192,10.1271394 C0.230995192,11.2069952 1.05262019,11.5708654 2.17942308,11.91125 L8.51769231,13.8362019 C9.26889423,14.0709615 9.67971154,14.047476 10.1961538,13.5779808 L23.0605769,1.54699519 C23.2129808,1.40615385 23.3891827,1.42963942 23.5182692,1.53526442 C23.6355769,1.65264423 23.6473558,1.82870192 23.5064904,1.98129808 L11.5107692,14.9043269 C11.0647356,15.3855529 11.0295192,15.7846394 11.252524,16.5710337 L13.1187981,22.7684615 C13.4709375,23.9539423 13.8347837,24.822524 14.9263942,24.822524 Z";
var pathGeometry = new PathGeometryConverter().ConvertFromString(pathData) as PathGeometry;
- var path = UIBezierPath.FromPath(pathGeometry.ToCGPath().Data);
+ var path = UIBezierPath.FromPath(pathGeometry?.ToCGPath() ?? new CGPath());
return UIPointerStyle.Create(UIPointerShape.Create(path), UIAxis.Both);
}
}
+}
+
+public static class GeometryExtensions
+{
+ public static CGPath ToCGPath(this PathGeometry pathGeometry)
+ {
+ var path = new CGPath();
+
+ CGAffineTransform transform = CGAffineTransform.MakeIdentity();
+
+ foreach (PathFigure pathFigure in pathGeometry.Figures)
+ {
+ path.MoveToPoint(transform, pathFigure.StartPoint);
+ Point lastPoint = pathFigure.StartPoint;
+
+ foreach (PathSegment pathSegment in pathFigure.Segments)
+ {
+ // LineSegment
+ if (pathSegment is LineSegment lineSegment)
+ {
+ path.AddLineToPoint(transform, lineSegment.Point);
+ lastPoint = lineSegment.Point;
+ }
+ // PolyLineSegment
+ else if (pathSegment is PolyLineSegment polylineSegment)
+ {
+ PointCollection points = polylineSegment.Points;
+
+ foreach (var point in points)
+ {
+ path.AddLineToPoint(transform, point);
+ }
+
+ lastPoint = points.Count > 0 ? points[^1] : Point.Zero;
+ }
+
+ // BezierSegment
+ if (pathSegment is BezierSegment segment)
+ {
+ path.AddCurveToPoint(
+ transform,
+ segment.Point1,
+ segment.Point2,
+ segment.Point3);
+
+ lastPoint = segment.Point3;
+ }
+ // PolyBezierSegment
+ else if (pathSegment is PolyBezierSegment polyBezierSegment)
+ {
+ PointCollection points = polyBezierSegment.Points;
+
+ if (points.Count >= 3)
+ {
+ for (int i = 0; i < points.Count; i += 3)
+ {
+ path.AddCurveToPoint(
+ transform,
+ points[i],
+ points[i + 1],
+ points[i + 2]);
+ }
+ }
+
+ lastPoint = points.Count > 0 ? points[^1] : Point.Zero;
+ }
+
+ // QuadraticBezierSegment
+ if (pathSegment is QuadraticBezierSegment bezierSegment)
+ {
+ path.AddQuadCurveToPoint(
+ transform,
+ new nfloat(bezierSegment.Point1.X),
+ new nfloat(bezierSegment.Point1.Y),
+ new nfloat(bezierSegment.Point2.X),
+ new nfloat(bezierSegment.Point2.Y));
+
+ lastPoint = bezierSegment.Point2;
+ }
+ // PolyQuadraticBezierSegment
+ else if (pathSegment is PolyQuadraticBezierSegment polyBezierSegment)
+ {
+ PointCollection points = polyBezierSegment.Points;
+
+ if (points.Count >= 2)
+ {
+ for (int i = 0; i < points.Count; i += 2)
+ {
+ path.AddQuadCurveToPoint(
+ transform,
+ new nfloat(points[i + 0].X),
+ new nfloat(points[i + 0].Y),
+ new nfloat(points[i + 1].X),
+ new nfloat(points[i + 1].Y));
+ }
+ }
+
+ lastPoint = points.Count > 0 ? points[^1] : Point.Zero;
+ }
+ // ArcSegment
+ else if (pathSegment is ArcSegment arcSegment)
+ {
+ List points = new List();
+
+ GeometryHelper.FlattenArc(
+ points,
+ lastPoint,
+ arcSegment.Point,
+ arcSegment.Size.Width,
+ arcSegment.Size.Height,
+ arcSegment.RotationAngle,
+ arcSegment.IsLargeArc,
+ arcSegment.SweepDirection == SweepDirection.CounterClockwise,
+ 1);
+
+ CGPoint[] cgpoints = new CGPoint[points.Count];
+
+ for (int i = 0; i < points.Count; i++)
+ cgpoints[i] = transform.TransformPoint(points[i]);
+
+ path.AddLines(cgpoints);
+
+ lastPoint = points.Count > 0 ? points[^1] : Point.Zero;
+ }
+ }
+
+ if (pathFigure.IsClosed)
+ {
+ path.CloseSubpath();
+ }
+ }
+
+ return path;
+ }
}
\ No newline at end of file
diff --git a/MauiDraggableView/App.xaml.cs b/MauiDraggableView/App.xaml.cs
index be0c861d..d037bc27 100644
--- a/MauiDraggableView/App.xaml.cs
+++ b/MauiDraggableView/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiDynamicConfiguration/App.xaml.cs b/MauiDynamicConfiguration/App.xaml.cs
index 5d5d0b86..da87f097 100644
--- a/MauiDynamicConfiguration/App.xaml.cs
+++ b/MauiDynamicConfiguration/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiDynamicConfiguration/LoginPage.xaml.cs b/MauiDynamicConfiguration/LoginPage.xaml.cs
index 93fa8c09..3cb41ced 100644
--- a/MauiDynamicConfiguration/LoginPage.xaml.cs
+++ b/MauiDynamicConfiguration/LoginPage.xaml.cs
@@ -15,10 +15,10 @@ public LoginPage(LoginViewModel loginViewModel)
BindingContext = this.loginViewModel;
}
- protected override void OnNavigatedTo(NavigatedToEventArgs args)
+ protected override async void OnNavigatedTo(NavigatedToEventArgs args)
{
base.OnNavigatedTo(args);
- loginViewModel.Initialize();
+ await loginViewModel.Initialize();
}
}
@@ -30,9 +30,9 @@ public partial class LoginViewModel(IConfigCatClient configCatClient, UserContex
[ObservableProperty]
string title = "Login";
- public void Initialize()
+ public async Task Initialize()
{
- Title = configCatClient.GetValue("beta", false) ? "Beta Login" : "Login";
+ Title = await configCatClient.GetValueAsync("beta", false) ? "Beta Login" : "Login";
}
[RelayCommand]
@@ -44,6 +44,12 @@ private async Task Login()
}
userContext.Email = Email;
- await ((AppShell)Application.Current!.MainPage!).GoToAsync("///MainPage");
+ var page = Application.Current?.Windows.LastOrDefault()?.Page as AppShell;
+ if (page is null)
+ {
+ ArgumentNullException.ThrowIfNull(page);
+ }
+
+ await page.GoToAsync("///MainPage");
}
}
\ No newline at end of file
diff --git a/MauiDynamicConfiguration/MainPage.xaml.cs b/MauiDynamicConfiguration/MainPage.xaml.cs
index 84245c6c..734c80a3 100644
--- a/MauiDynamicConfiguration/MainPage.xaml.cs
+++ b/MauiDynamicConfiguration/MainPage.xaml.cs
@@ -15,10 +15,10 @@ public MainPage(MainViewModel mainViewModel)
BindingContext = mainViewModel;
}
- protected override void OnNavigatedTo(NavigatedToEventArgs args)
+ protected override async void OnNavigatedTo(NavigatedToEventArgs args)
{
base.OnNavigatedTo(args);
- mainViewModel.Initialize();
+ await mainViewModel.Initialize();
}
}
@@ -37,26 +37,32 @@ public partial class MainViewModel : ObservableObject
public MainViewModel(IConfigCatClient configCatClient, UserContext userContext)
{
this.configCatClient = configCatClient;
- configCatClient.ConfigChanged += (_, _) =>
+ configCatClient.ConfigChanged += async (_, _) =>
{
- Initialize();
+ await Initialize();
};
this.userContext = userContext;
}
- public void Initialize()
+ public async Task Initialize()
{
- Title = this.configCatClient.GetValue("beta_gmailusers_mainpagetitle", "Main Page", new User(userContext.Email)
+ Title = await configCatClient.GetValueAsync("beta_gmailusers_mainpagetitle", "Main Page", new User(userContext.Email)
{
Email = userContext.Email
});
- Image = this.configCatClient.GetValue("beta", false) ? "botbeta.png" : "bot.png";
+ Image = await configCatClient.GetValueAsync("beta", false) ? "botbeta.png" : "bot.png";
}
[RelayCommand]
private async Task Logout()
{
userContext.Email = string.Empty;
- await ((AppShell)Application.Current!.MainPage!).GoToAsync("///LoginPage");
+ var page = Application.Current?.Windows.LastOrDefault()?.Page as AppShell;
+ if (page is null)
+ {
+ ArgumentNullException.ThrowIfNull(page);
+ }
+
+ await page.GoToAsync("///LoginPage");
}
}
\ No newline at end of file
diff --git a/MauiDynamicConfiguration/MauiDynamicConfiguration.csproj b/MauiDynamicConfiguration/MauiDynamicConfiguration.csproj
index c5b82a58..f0f84ca0 100644
--- a/MauiDynamicConfiguration/MauiDynamicConfiguration.csproj
+++ b/MauiDynamicConfiguration/MauiDynamicConfiguration.csproj
@@ -25,7 +25,7 @@
-
-
+
+
diff --git a/MauiImageEffects/App.xaml.cs b/MauiImageEffects/App.xaml.cs
index 7c53e51e..9ee483b6 100644
--- a/MauiImageEffects/App.xaml.cs
+++ b/MauiImageEffects/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiImageEffects/SaturationBehavior/SaturationConverter.cs b/MauiImageEffects/SaturationBehavior/SaturationConverter.cs
index dea223c6..92fbc054 100644
--- a/MauiImageEffects/SaturationBehavior/SaturationConverter.cs
+++ b/MauiImageEffects/SaturationBehavior/SaturationConverter.cs
@@ -2,6 +2,7 @@
using System.Globalization;
+[AcceptEmptyServiceProvider]
internal class SaturationConverter : IValueConverter
{
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
diff --git a/MauiLocalization/App.xaml.cs b/MauiLocalization/App.xaml.cs
index 7a23d00b..45474dfd 100644
--- a/MauiLocalization/App.xaml.cs
+++ b/MauiLocalization/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiLocalization/MauiLocalization.csproj b/MauiLocalization/MauiLocalization.csproj
index 5111658f..51b03f70 100644
--- a/MauiLocalization/MauiLocalization.csproj
+++ b/MauiLocalization/MauiLocalization.csproj
@@ -29,8 +29,8 @@
-
-
+
+
diff --git a/MauiMaps/App.xaml.cs b/MauiMaps/App.xaml.cs
index 86aaff81..9fa6af5d 100644
--- a/MauiMaps/App.xaml.cs
+++ b/MauiMaps/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiMaps/MauiMaps.csproj b/MauiMaps/MauiMaps.csproj
index 29b0ccec..71f1b6ef 100644
--- a/MauiMaps/MauiMaps.csproj
+++ b/MauiMaps/MauiMaps.csproj
@@ -29,9 +29,9 @@
-
-
-
+
+
+
diff --git a/MauiMarkdown/App.xaml.cs b/MauiMarkdown/App.xaml.cs
index 782da954..1136a858 100644
--- a/MauiMarkdown/App.xaml.cs
+++ b/MauiMarkdown/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiMarkdown/MauiMarkdown.csproj b/MauiMarkdown/MauiMarkdown.csproj
index fe2a1df2..1b9ba061 100644
--- a/MauiMarkdown/MauiMarkdown.csproj
+++ b/MauiMarkdown/MauiMarkdown.csproj
@@ -29,7 +29,7 @@
-
+
diff --git a/MauiMultiWindow/App.xaml.cs b/MauiMultiWindow/App.xaml.cs
index d44f522e..d1f6f5f3 100644
--- a/MauiMultiWindow/App.xaml.cs
+++ b/MauiMultiWindow/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/MauiMultiWindow/MauiMultiWindow.csproj b/MauiMultiWindow/MauiMultiWindow.csproj
index 47d21918..272a625b 100644
--- a/MauiMultiWindow/MauiMultiWindow.csproj
+++ b/MauiMultiWindow/MauiMultiWindow.csproj
@@ -25,6 +25,6 @@
-
+
\ No newline at end of file
diff --git a/MauiMultiWindow/Platforms/MacCatalyst/WindowExtensions.cs b/MauiMultiWindow/Platforms/MacCatalyst/WindowExtensions.cs
index 5f167fd4..324df771 100644
--- a/MauiMultiWindow/Platforms/MacCatalyst/WindowExtensions.cs
+++ b/MauiMultiWindow/Platforms/MacCatalyst/WindowExtensions.cs
@@ -8,7 +8,7 @@ public static class WindowExtensions
{
public static Task OpenModalWindowAsync(this Window parentWindow, ModalWindow content)
{
- ArgumentNullException.ThrowIfNull(parentWindow.Handler.MauiContext);
+ ArgumentNullException.ThrowIfNull(parentWindow.Handler?.MauiContext);
var taskCompletionSource = new TaskCompletionSource();
var parentUIWindow = parentWindow.Handler.PlatformView as UIWindow ?? throw new Exception();
@@ -36,13 +36,12 @@ public static class WindowExtensions
private static (UIView, CGSize) GetContentView(VisualElement content, IMauiContext mauiContext)
{
var contentView = content.ToPlatform(mauiContext);
- var contentSize =
- content.Measure(double.PositiveInfinity, double.PositiveInfinity, MeasureFlags.IncludeMargins);
+ var contentSize = content.Measure(double.PositiveInfinity, double.PositiveInfinity);
- var preferredContentSize = contentSize.Request.ToCGSize() + new CGSize(50, 50);
- contentView.Frame = new CGRect((preferredContentSize.Width - contentSize.Request.Width) / 2,
- (preferredContentSize.Height - contentSize.Request.Height) / 2,
- contentSize.Request.Width, contentSize.Request.Height);
+ var preferredContentSize = contentSize.ToCGSize() + new CGSize(50, 50);
+ contentView.Frame = new CGRect((preferredContentSize.Width - contentSize.Width) / 2,
+ (preferredContentSize.Height - contentSize.Height) / 2,
+ contentSize.Width, contentSize.Height);
return (contentView, preferredContentSize);
}
diff --git a/MauiNotifications/App.xaml.cs b/MauiNotifications/App.xaml.cs
index e3fe7a35..bfdf7000 100644
--- a/MauiNotifications/App.xaml.cs
+++ b/MauiNotifications/App.xaml.cs
@@ -8,8 +8,11 @@ public App(DeviceInstallationService deviceInstallationService)
{
this.deviceInstallationService = deviceInstallationService;
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
protected override async void OnStart()
diff --git a/MauiNotifications/MauiNotifications.csproj b/MauiNotifications/MauiNotifications.csproj
index 09363ee6..a2ad48d1 100644
--- a/MauiNotifications/MauiNotifications.csproj
+++ b/MauiNotifications/MauiNotifications.csproj
@@ -32,11 +32,11 @@
-
+
-
+
diff --git a/MauiPaint/App.xaml.cs b/MauiPaint/App.xaml.cs
index 071a821d..d716752d 100644
--- a/MauiPaint/App.xaml.cs
+++ b/MauiPaint/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiPaint/Figures/FigureExtensions.cs b/MauiPaint/Figures/FigureExtensions.cs
index 1741e080..b044d8b6 100644
--- a/MauiPaint/Figures/FigureExtensions.cs
+++ b/MauiPaint/Figures/FigureExtensions.cs
@@ -4,7 +4,8 @@ public static class FigureExtensions
{
public static async Task SetParameter(string parameterName)
{
- if (Application.Current?.MainPage is null)
+ var page = Application.Current?.Windows.LastOrDefault()?.Page;
+ if (page is null)
{
return default;
}
@@ -13,7 +14,7 @@ public static class FigureExtensions
bool isValid;
do
{
- var value = await Application.Current.MainPage.DisplayPromptAsync("Set parameter", parameterName);
+ var value = await page.DisplayPromptAsync("Set parameter", parameterName);
try
{
result = (T)Convert.ChangeType(value, typeof(T));
diff --git a/MauiPaint/MainPageViewModel.cs b/MauiPaint/MainPageViewModel.cs
index 07029313..09550a4a 100644
--- a/MauiPaint/MainPageViewModel.cs
+++ b/MauiPaint/MainPageViewModel.cs
@@ -52,7 +52,8 @@ void Quit()
void Help()
{
var help = new Help();
- Application.Current?.MainPage?.ShowPopup(help);
+ var page = Application.Current?.Windows.LastOrDefault()?.Page;
+ page?.ShowPopup(help);
}
[RelayCommand]
@@ -63,7 +64,8 @@ void PreviewImage()
Stream = async (c) => await DrawingView.GetImageStream(
Lines, new Size(1000, 1000), Background)
});
- Application.Current?.MainPage?.ShowPopup(preview);
+ var page = Application.Current?.Windows.LastOrDefault()?.Page;
+ page?.ShowPopup(preview);
}
[RelayCommand]
diff --git a/MauiPaint/MauiPaint.csproj b/MauiPaint/MauiPaint.csproj
index 2f27f904..b033b21f 100644
--- a/MauiPaint/MauiPaint.csproj
+++ b/MauiPaint/MauiPaint.csproj
@@ -25,8 +25,8 @@
-
-
+
+
diff --git a/MauiSamples.sln b/MauiSamples.sln
index 06000832..48116a51 100644
--- a/MauiSamples.sln
+++ b/MauiSamples.sln
@@ -16,11 +16,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiSqliteBlazor", "Databas
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteRepository", "Database\Sqlite\SqliteRepository\SqliteRepository.csproj", "{13DAE136-5BF2-460C-BFD7-7BDB0785C935}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KanbanBoard", "KanbanBoard\KanbanBoard.csproj", "{5E4780D5-8A16-44CE-975D-155E578351D0}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CE4ABC8D-3F54-49AA-BA5A-DD47E7CEB56B}"
ProjectSection(SolutionItems) = preProject
Directory.Build.props = Directory.Build.props
+ .github\workflows\dotnet.yml = .github\workflows\dotnet.yml
NuGet.config = NuGet.config
README.mdpp = README.mdpp
SETUP.md = SETUP.md
@@ -151,6 +150,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiNotifications", "MauiNo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiBarcode", "MauiBarcode\MauiBarcode.csproj", "{584461EF-67BC-4D25-9438-0EE988136D97}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "KanbanBoard", "KanbanBoard", "{67B66400-3DDB-4BC2-8468-D265CDE7381B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KanbanBoardDb", "Database\KanbanBoard\KanbanBoardDb\KanbanBoardDb.csproj", "{DF18E324-7098-44A5-A56C-84C728D1AAE2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KanbanBoard", "Database\KanbanBoard\KanbanBoard\KanbanBoard.csproj", "{A3722C8A-F863-4B36-9891-DF3480D64F2C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -191,12 +196,6 @@ Global
{13DAE136-5BF2-460C-BFD7-7BDB0785C935}.Debug|Any CPU.Build.0 = Debug|Any CPU
{13DAE136-5BF2-460C-BFD7-7BDB0785C935}.Release|Any CPU.ActiveCfg = Release|Any CPU
{13DAE136-5BF2-460C-BFD7-7BDB0785C935}.Release|Any CPU.Build.0 = Release|Any CPU
- {5E4780D5-8A16-44CE-975D-155E578351D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5E4780D5-8A16-44CE-975D-155E578351D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5E4780D5-8A16-44CE-975D-155E578351D0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
- {5E4780D5-8A16-44CE-975D-155E578351D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5E4780D5-8A16-44CE-975D-155E578351D0}.Release|Any CPU.Build.0 = Release|Any CPU
- {5E4780D5-8A16-44CE-975D-155E578351D0}.Release|Any CPU.Deploy.0 = Release|Any CPU
{6BF7A52A-311B-41C0-A112-3D8A06DA12FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6BF7A52A-311B-41C0-A112-3D8A06DA12FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6BF7A52A-311B-41C0-A112-3D8A06DA12FF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
@@ -455,6 +454,14 @@ Global
{584461EF-67BC-4D25-9438-0EE988136D97}.Release|Any CPU.ActiveCfg = Release|Any CPU
{584461EF-67BC-4D25-9438-0EE988136D97}.Release|Any CPU.Build.0 = Release|Any CPU
{584461EF-67BC-4D25-9438-0EE988136D97}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {DF18E324-7098-44A5-A56C-84C728D1AAE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF18E324-7098-44A5-A56C-84C728D1AAE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF18E324-7098-44A5-A56C-84C728D1AAE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF18E324-7098-44A5-A56C-84C728D1AAE2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3722C8A-F863-4B36-9891-DF3480D64F2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3722C8A-F863-4B36-9891-DF3480D64F2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3722C8A-F863-4B36-9891-DF3480D64F2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3722C8A-F863-4B36-9891-DF3480D64F2C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -484,6 +491,9 @@ Global
{5411B28C-9E39-4FAF-BC6E-448C0DC9F0BC} = {A4982784-AAC5-4C47-A1F8-A0A9DB51D531}
{80BC6E88-5A41-426D-B625-B8EEE1453FF0} = {E08722A6-C1B6-4C83-983C-809BF721D6F1}
{8782844B-0C34-42AE-8BF9-E2DB2CC95495} = {E08722A6-C1B6-4C83-983C-809BF721D6F1}
+ {67B66400-3DDB-4BC2-8468-D265CDE7381B} = {D3C704D0-FB95-42BA-BBF1-E7360491551F}
+ {DF18E324-7098-44A5-A56C-84C728D1AAE2} = {67B66400-3DDB-4BC2-8468-D265CDE7381B}
+ {A3722C8A-F863-4B36-9891-DF3480D64F2C} = {67B66400-3DDB-4BC2-8468-D265CDE7381B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572}
diff --git a/MauiShellCustomization/App.xaml.cs b/MauiShellCustomization/App.xaml.cs
index 30f777f2..3486fdb8 100644
--- a/MauiShellCustomization/App.xaml.cs
+++ b/MauiShellCustomization/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiShellCustomization/MauiShellCustomization.csproj b/MauiShellCustomization/MauiShellCustomization.csproj
index 42095f89..56790469 100644
--- a/MauiShellCustomization/MauiShellCustomization.csproj
+++ b/MauiShellCustomization/MauiShellCustomization.csproj
@@ -30,6 +30,6 @@
-
+
diff --git a/MauiShellCustomization/Platforms/Android/CustomShellItemRenderer.cs b/MauiShellCustomization/Platforms/Android/CustomShellItemRenderer.cs
index db4948e4..49bf0bfb 100644
--- a/MauiShellCustomization/Platforms/Android/CustomShellItemRenderer.cs
+++ b/MauiShellCustomization/Platforms/Android/CustomShellItemRenderer.cs
@@ -55,7 +55,8 @@ internal class CustomShellItemRenderer(IShellContext context) : ShellItemRendere
rootLayout.AddView(backgroundView);
}
- tabBar.CenterViewImageSource?.LoadImage(Application.Current!.MainPage!.Handler!.MauiContext!, result =>
+ var context = tabBar.Window?.Page?.Handler?.MauiContext ?? Application.Current?.Windows.LastOrDefault()?.Page?.Handler?.MauiContext;
+ tabBar.CenterViewImageSource?.LoadImage(context!, result =>
{
if (result?.Value is not BitmapDrawable drawable || drawable.Bitmap is null)
{
diff --git a/MauiShellCustomization/Platforms/MacCatalyst/CustomShellItemRenderer.cs b/MauiShellCustomization/Platforms/MacCatalyst/CustomShellItemRenderer.cs
index bbe74005..2392884a 100644
--- a/MauiShellCustomization/Platforms/MacCatalyst/CustomShellItemRenderer.cs
+++ b/MauiShellCustomization/Platforms/MacCatalyst/CustomShellItemRenderer.cs
@@ -4,6 +4,7 @@
namespace MauiShellCustomization;
+using Microsoft.Maui.Controls;
using Microsoft.Maui.Platform;
class CustomShellItemRenderer(IShellContext context) : ShellItemRenderer(context)
@@ -22,8 +23,8 @@ public override async void ViewWillLayoutSubviews()
if (middleView is null)
{
- var image = await tabbar.CenterViewImageSource.GetPlatformImageAsync(
- Application.Current!.MainPage!.Handler!.MauiContext!);
+ var context = tabbar.Window?.Page?.Handler?.MauiContext ?? Application.Current?.Windows.LastOrDefault()?.Page?.Handler?.MauiContext;
+ var image = await tabbar.CenterViewImageSource.GetPlatformImageAsync(context!);
middleView = new UIButton(UIButtonType.Custom);
middleView.BackgroundColor = tabbar.CenterViewBackgroundColor?.ToPlatform();
diff --git a/MauiShellCustomization/Platforms/iOS/CustomShellItemRenderer.cs b/MauiShellCustomization/Platforms/iOS/CustomShellItemRenderer.cs
index 3a9eb9c8..25bb29ca 100644
--- a/MauiShellCustomization/Platforms/iOS/CustomShellItemRenderer.cs
+++ b/MauiShellCustomization/Platforms/iOS/CustomShellItemRenderer.cs
@@ -4,6 +4,7 @@
namespace MauiShellCustomization;
+using Microsoft.Maui.Controls;
using Microsoft.Maui.Platform;
internal class CustomShellItemRenderer(IShellContext context) : ShellItemRenderer(context)
@@ -22,8 +23,8 @@ public override async void ViewWillLayoutSubviews()
if (middleView is null)
{
- var image = await tabbar.CenterViewImageSource.GetPlatformImageAsync(
- Application.Current!.MainPage!.Handler!.MauiContext!);
+ var context = tabbar.Window?.Page?.Handler?.MauiContext ?? Application.Current?.Windows.LastOrDefault()?.Page?.Handler?.MauiContext;
+ var image = await tabbar.CenterViewImageSource.GetPlatformImageAsync(context!);
middleView = new UIButton(UIButtonType.Custom);
middleView.BackgroundColor = tabbar.CenterViewBackgroundColor?.ToPlatform();
diff --git a/MauiSpeech/App.xaml.cs b/MauiSpeech/App.xaml.cs
index ff65f80e..7947d827 100644
--- a/MauiSpeech/App.xaml.cs
+++ b/MauiSpeech/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiSpeech/MauiSpeech.csproj b/MauiSpeech/MauiSpeech.csproj
index 82307316..4812ef2a 100644
--- a/MauiSpeech/MauiSpeech.csproj
+++ b/MauiSpeech/MauiSpeech.csproj
@@ -28,8 +28,8 @@
-
-
+
+
diff --git a/MauiStaggeredCollectionView/App.xaml.cs b/MauiStaggeredCollectionView/App.xaml.cs
index cc1c87df..8a78a3a2 100644
--- a/MauiStaggeredCollectionView/App.xaml.cs
+++ b/MauiStaggeredCollectionView/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiStaggeredCollectionView/MauiStaggeredCollectionView.csproj b/MauiStaggeredCollectionView/MauiStaggeredCollectionView.csproj
index c8241fff..eaa92870 100644
--- a/MauiStaggeredCollectionView/MauiStaggeredCollectionView.csproj
+++ b/MauiStaggeredCollectionView/MauiStaggeredCollectionView.csproj
@@ -27,7 +27,7 @@
-
+
7.1.2
diff --git a/MauiStaggeredCollectionView/Platforms/Windows/App.xaml.cs b/MauiStaggeredCollectionView/Platforms/Windows/App.xaml.cs
index db46c17b..728534d6 100644
--- a/MauiStaggeredCollectionView/Platforms/Windows/App.xaml.cs
+++ b/MauiStaggeredCollectionView/Platforms/Windows/App.xaml.cs
@@ -3,23 +3,21 @@
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
-namespace MauiStaggeredCollectionView.WinUI
+namespace MauiStaggeredCollectionView.WinUI;
+
+///
+/// Provides application-specific behavior to supplement the default Application class.
+///
+public partial class App : MauiWinUIApplication
{
///
- /// Provides application-specific behavior to supplement the default Application class.
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
///
- public partial class App : MauiWinUIApplication
+ public App()
{
- ///
- /// Initializes the singleton application object. This is the first line of authored code
- /// executed, and as such is the logical equivalent of main() or WinMain().
- ///
- public App()
- {
- this.InitializeComponent();
- }
-
- protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ this.InitializeComponent();
}
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
\ No newline at end of file
diff --git a/MauiTabView/App.xaml.cs b/MauiTabView/App.xaml.cs
index af9f17b8..94c66b0f 100644
--- a/MauiTabView/App.xaml.cs
+++ b/MauiTabView/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiTabView/MauiTabView.csproj b/MauiTabView/MauiTabView.csproj
index a8c6632a..5ee5320b 100644
--- a/MauiTabView/MauiTabView.csproj
+++ b/MauiTabView/MauiTabView.csproj
@@ -29,7 +29,7 @@
-
+
diff --git a/MauiTaskbarProgress/App.xaml.cs b/MauiTaskbarProgress/App.xaml.cs
index 54dbbfa2..1787aa1d 100644
--- a/MauiTaskbarProgress/App.xaml.cs
+++ b/MauiTaskbarProgress/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiTaskbarProgress/MauiTaskbarProgress.csproj b/MauiTaskbarProgress/MauiTaskbarProgress.csproj
index d6bb0fba..1f262455 100644
--- a/MauiTaskbarProgress/MauiTaskbarProgress.csproj
+++ b/MauiTaskbarProgress/MauiTaskbarProgress.csproj
@@ -25,6 +25,6 @@
-
+
diff --git a/MauiTests/Client.Android.UITests/AppiumSetup.cs b/MauiTests/Client.Android.UITests/AppiumSetup.cs
index 24a50165..ec7045f3 100644
--- a/MauiTests/Client.Android.UITests/AppiumSetup.cs
+++ b/MauiTests/Client.Android.UITests/AppiumSetup.cs
@@ -72,9 +72,9 @@ private string GetApp()
#else
const string configuration = "Release";
#endif
- const string testsPath = $@"Client.Android.UITests\bin\{configuration}\net8.0";
+ const string testsPath = $@"Client.Android.UITests\bin\{configuration}\net9.0";
var solutionPath = Environment.CurrentDirectory.Replace(testsPath, string.Empty);
- var path = $@"{solutionPath}Client\bin\{configuration}\net8.0-android\{PackageName}-Signed.apk";
+ var path = $@"{solutionPath}Client\bin\{configuration}\net9.0-android\{PackageName}-Signed.apk";
testOutputHelper.WriteLine(path);
return path;
}
diff --git a/MauiTests/Client.Android.UITests/Client.Android.UITests.csproj b/MauiTests/Client.Android.UITests/Client.Android.UITests.csproj
index e28b0a89..b70413ee 100644
--- a/MauiTests/Client.Android.UITests/Client.Android.UITests.csproj
+++ b/MauiTests/Client.Android.UITests/Client.Android.UITests.csproj
@@ -6,13 +6,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -23,8 +23,8 @@
-
-
+
+
diff --git a/MauiTests/Client.MacCatalyst.UITests/AppiumSetup.cs b/MauiTests/Client.MacCatalyst.UITests/AppiumSetup.cs
index c4ebb58f..a2abd5bc 100644
--- a/MauiTests/Client.MacCatalyst.UITests/AppiumSetup.cs
+++ b/MauiTests/Client.MacCatalyst.UITests/AppiumSetup.cs
@@ -41,9 +41,9 @@ private string GetApp()
#else
const string configuration = "Release";
#endif
- const string testsPath = $@"Client.MacCatalyst.UITests\bin\{configuration}\net8.0";
+ const string testsPath = $@"Client.MacCatalyst.UITests\bin\{configuration}\net9.0";
var solutionPath = Environment.CurrentDirectory.Replace(testsPath, string.Empty);
- var path = $@"{solutionPath}Client\bin\{configuration}\net8.0-maccatalyst\maccatalyst-x64\Client.app";
+ var path = $@"{solutionPath}Client\bin\{configuration}\net9.0-maccatalyst\maccatalyst-x64\Client.app";
testOutputHelper.WriteLine(path);
return path;
}
diff --git a/MauiTests/Client.MacCatalyst.UITests/Client.MacCatalyst.UITests.csproj b/MauiTests/Client.MacCatalyst.UITests/Client.MacCatalyst.UITests.csproj
index 11f1fe1c..8e3ad6a6 100644
--- a/MauiTests/Client.MacCatalyst.UITests/Client.MacCatalyst.UITests.csproj
+++ b/MauiTests/Client.MacCatalyst.UITests/Client.MacCatalyst.UITests.csproj
@@ -6,13 +6,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -23,7 +23,7 @@
-
+
diff --git a/MauiTests/Client.Tizen.UITests/AppiumSetup.cs b/MauiTests/Client.Tizen.UITests/AppiumSetup.cs
index fa1b1abe..86d87b5d 100644
--- a/MauiTests/Client.Tizen.UITests/AppiumSetup.cs
+++ b/MauiTests/Client.Tizen.UITests/AppiumSetup.cs
@@ -39,9 +39,9 @@ private string GetApp()
#else
const string configuration = "Release";
#endif
- const string testsPath = $@"Client.Tizen.UITests\bin\{configuration}\net8.0";
+ const string testsPath = $@"Client.Tizen.UITests\bin\{configuration}\net9.0";
var solutionPath = Environment.CurrentDirectory.Replace(testsPath, string.Empty);
- var path = $@"{solutionPath}Client\bin\{configuration}\\net8.0-tizen\tizen-x86\com.vladislavantonyuk.client-1.0.0.tpk";
+ var path = $@"{solutionPath}Client\bin\{configuration}\\net9.0-tizen\tizen-x86\com.vladislavantonyuk.client-1.0.0.tpk";
testOutputHelper.WriteLine(path);
return path;
}
diff --git a/MauiTests/Client.Tizen.UITests/Client.Tizen.UITests.csproj b/MauiTests/Client.Tizen.UITests/Client.Tizen.UITests.csproj
index 865617c0..70ea3d09 100644
--- a/MauiTests/Client.Tizen.UITests/Client.Tizen.UITests.csproj
+++ b/MauiTests/Client.Tizen.UITests/Client.Tizen.UITests.csproj
@@ -6,13 +6,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -23,7 +23,7 @@
-
+
diff --git a/MauiTests/Client.Windows.UITests/AppiumSetup.cs b/MauiTests/Client.Windows.UITests/AppiumSetup.cs
index 8826033a..f6605a80 100644
--- a/MauiTests/Client.Windows.UITests/AppiumSetup.cs
+++ b/MauiTests/Client.Windows.UITests/AppiumSetup.cs
@@ -45,9 +45,9 @@ private string GetApp()
#else
const string configuration = "Release";
#endif
- const string testsPath = $@"Client.Windows.UITests\bin\{configuration}\net8.0";
+ const string testsPath = $@"Client.Windows.UITests\bin\{configuration}\net9.0";
var solutionPath = Environment.CurrentDirectory.Replace(testsPath, string.Empty);
- var path = $@"{solutionPath}Client\bin\{configuration}\net8.0-windows10.0.19041.0\win10-x64\Client.exe";
+ var path = $@"{solutionPath}Client\bin\{configuration}\net9.0-windows10.0.19041.0\win10-x64\Client.exe";
testOutputHelper.WriteLine(path);
return path;
}
diff --git a/MauiTests/Client.Windows.UITests/Client.Windows.UITests.csproj b/MauiTests/Client.Windows.UITests/Client.Windows.UITests.csproj
index e5752e9d..9f780927 100644
--- a/MauiTests/Client.Windows.UITests/Client.Windows.UITests.csproj
+++ b/MauiTests/Client.Windows.UITests/Client.Windows.UITests.csproj
@@ -6,13 +6,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -23,7 +23,7 @@
-
+
diff --git a/MauiTests/Client.iOS.UITests/AppiumSetup.cs b/MauiTests/Client.iOS.UITests/AppiumSetup.cs
index 0372172c..efe1bf8e 100644
--- a/MauiTests/Client.iOS.UITests/AppiumSetup.cs
+++ b/MauiTests/Client.iOS.UITests/AppiumSetup.cs
@@ -41,9 +41,9 @@ private string GetApp()
#else
const string configuration = "Release";
#endif
- const string testsPath = $@"Client.iOS.UITests\bin\{configuration}\net8.0";
+ const string testsPath = $@"Client.iOS.UITests\bin\{configuration}\net9.0";
var solutionPath = Environment.CurrentDirectory.Replace(testsPath, string.Empty);
- var path = $@"{solutionPath}Client\bin\{configuration}\net8.0-ios\iossimulator-x64\Client.app";
+ var path = $@"{solutionPath}Client\bin\{configuration}\net9.0-ios\iossimulator-x64\Client.app";
testOutputHelper.WriteLine(path);
return path;
}
diff --git a/MauiTests/Client.iOS.UITests/Client.iOS.UITests.csproj b/MauiTests/Client.iOS.UITests/Client.iOS.UITests.csproj
index 6af1325c..433eee31 100644
--- a/MauiTests/Client.iOS.UITests/Client.iOS.UITests.csproj
+++ b/MauiTests/Client.iOS.UITests/Client.iOS.UITests.csproj
@@ -6,13 +6,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -23,7 +23,7 @@
-
+
diff --git a/MauiTests/Client/App.xaml.cs b/MauiTests/Client/App.xaml.cs
index ca6fcc26..a3cfdbf9 100644
--- a/MauiTests/Client/App.xaml.cs
+++ b/MauiTests/Client/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
- }
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
+ }
}
\ No newline at end of file
diff --git a/MauiWorkflowBuilder/App.xaml.cs b/MauiWorkflowBuilder/App.xaml.cs
index 730bad4c..f23326ca 100644
--- a/MauiWorkflowBuilder/App.xaml.cs
+++ b/MauiWorkflowBuilder/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/MauiWorkflowBuilder/MauiWorkflowBuilder.csproj b/MauiWorkflowBuilder/MauiWorkflowBuilder.csproj
index 834bc7ac..18784b54 100644
--- a/MauiWorkflowBuilder/MauiWorkflowBuilder.csproj
+++ b/MauiWorkflowBuilder/MauiWorkflowBuilder.csproj
@@ -28,12 +28,12 @@
-
-
+
+
-
+
diff --git a/README.md b/README.md
index b854e6af..24410346 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,8 @@
[](https://stand-with-ukraine.pp.ua)
## Thank You
-Special thanks to my friends and sponsors: @PeterFucci, Gerald Versluis (jfversluis), @renatolopes, Glen Herman, Olexii, Brady, Yury Michurin, VToegel, Aleksander Rokic, Jeffrey Williams, TimKyn, Standa Mikes, Aaron Schaefer, AIvanHeerden, 7 M O X D, gbrewer, Ryan, @janhjordie, erossiniuk, David, Sab, Andreas, plettb, Ocean Siu, Sreckcep, Standa Mikeš.
+Special thanks to my friends and sponsors: @PeterFucci, Gerald Versluis (jfversluis), @renatolopes, Glen Herman, Olexii, Brady, Yury Michurin, VToegel, Aleksander Rokic, Jeffrey Williams, TimKyn, Standa Mikes, Aaron Schaefer, AIvanHeerden, 7 M O X D, gbrewer, Ryan, @janhjordie, erossiniuk, David, Sab, Andreas, plettb, Ocean Siu, Sreckcep, Standa Mikeš, becks120, cissemy
+
This project is tested with BrowserStack.
@@ -25,7 +26,7 @@ The development guide can be found at [SETUP.md](./SETUP.md).
1. [MauiMultiWindow](MauiMultiWindow) - Work with .NET MAUI Windows.
-1. [KanbanBoard](KanbanBoard) - Replicate Kanban board. Drag & Drop Cards, Set Column WIP, Store data in Local Db
+1. [KanbanBoard](Database/KanbanBoard) - Replicate Kanban board. Drag & Drop Cards, Set Column WIP, Store data in Local Db
1. [TutorialHelp](TutorialHelp) - Interactive app tutorial in .NET MAUI using CommunityToolkit.Maui Popup.
diff --git a/README.mdpp b/README.mdpp
index edb9e495..b0162e64 100644
--- a/README.mdpp
+++ b/README.mdpp
@@ -25,7 +25,7 @@ The development guide can be found at [SETUP.md](./SETUP.md).
1. [MauiMultiWindow](MauiMultiWindow) - Work with .NET MAUI Windows.
-1. [KanbanBoard](KanbanBoard) - Replicate Kanban board. Drag & Drop Cards, Set Column WIP, Store data in Local Db
+1. [KanbanBoard](Database/KanbanBoard) - Replicate Kanban board. Drag & Drop Cards, Set Column WIP, Store data in Local Db
1. [TutorialHelp](TutorialHelp) - Interactive app tutorial in .NET MAUI using CommunityToolkit.Maui Popup.
diff --git a/RepositoryContributors/App.xaml.cs b/RepositoryContributors/App.xaml.cs
index 168687d0..05f06157 100644
--- a/RepositoryContributors/App.xaml.cs
+++ b/RepositoryContributors/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new MainPage();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage());
}
}
\ No newline at end of file
diff --git a/RepositoryContributors/RepositoryContributors.csproj b/RepositoryContributors/RepositoryContributors.csproj
index 69a3672e..7817a93f 100644
--- a/RepositoryContributors/RepositoryContributors.csproj
+++ b/RepositoryContributors/RepositoryContributors.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/TutorialHelp/App.xaml.cs b/TutorialHelp/App.xaml.cs
index bc4fccdc..1378a91c 100644
--- a/TutorialHelp/App.xaml.cs
+++ b/TutorialHelp/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new NavigationPage(new MainPage());
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new NavigationPage(new MainPage()));
}
}
\ No newline at end of file
diff --git a/TutorialHelp/TutorialHelp.csproj b/TutorialHelp/TutorialHelp.csproj
index 344e2ddd..842e37af 100644
--- a/TutorialHelp/TutorialHelp.csproj
+++ b/TutorialHelp/TutorialHelp.csproj
@@ -25,8 +25,8 @@
-
-
+
+
diff --git a/iOSExtensions/JokeApp/JokeApp/App.xaml.cs b/iOSExtensions/JokeApp/JokeApp/App.xaml.cs
index d55b8ebc..8dfeb546 100644
--- a/iOSExtensions/JokeApp/JokeApp/App.xaml.cs
+++ b/iOSExtensions/JokeApp/JokeApp/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/iOSExtensions/JokeApp/JokeApp/JokeApp.csproj b/iOSExtensions/JokeApp/JokeApp/JokeApp.csproj
index 3b725617..fbf882e3 100644
--- a/iOSExtensions/JokeApp/JokeApp/JokeApp.csproj
+++ b/iOSExtensions/JokeApp/JokeApp/JokeApp.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
$(NetVersion)-android;$(NetVersion)-ios;$(NetVersion)-maccatalyst
$(TargetFrameworks);$(NetVersion)-windows10.0.19041.0
@@ -40,12 +40,11 @@
-
-
-
+
+
+
-
-
+
diff --git a/iOSExtensions/JokeApp/JokeAppWidget/JokeAppWidget.csproj b/iOSExtensions/JokeApp/JokeAppWidget/JokeAppWidget.csproj
index 0910d7c6..ae89e7e5 100644
--- a/iOSExtensions/JokeApp/JokeAppWidget/JokeAppWidget.csproj
+++ b/iOSExtensions/JokeApp/JokeAppWidget/JokeAppWidget.csproj
@@ -1,6 +1,6 @@
- net8.0-ios
+ net9.0-ios
Library
com.vladislavantonyuk.jokeapp.Widget
diff --git a/iOSExtensions/ShareExtension/AppContainer/App.xaml.cs b/iOSExtensions/ShareExtension/AppContainer/App.xaml.cs
index d4d1299d..511eca38 100644
--- a/iOSExtensions/ShareExtension/AppContainer/App.xaml.cs
+++ b/iOSExtensions/ShareExtension/AppContainer/App.xaml.cs
@@ -5,7 +5,10 @@ public partial class App : Application
public App()
{
InitializeComponent();
+ }
- MainPage = new AppShell();
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
}
}
\ No newline at end of file
diff --git a/iOSExtensions/ShareExtension/AppContainer/AppContainer.csproj b/iOSExtensions/ShareExtension/AppContainer/AppContainer.csproj
index 141ac794..8c88fdb6 100644
--- a/iOSExtensions/ShareExtension/AppContainer/AppContainer.csproj
+++ b/iOSExtensions/ShareExtension/AppContainer/AppContainer.csproj
@@ -1,7 +1,7 @@
- net8.0-ios
+ net9.0-ios
Exe
true
true
@@ -49,8 +49,7 @@
-
-
+
diff --git a/iOSExtensions/ShareExtension/AppContainerExtension/AppContainerExtension.csproj b/iOSExtensions/ShareExtension/AppContainerExtension/AppContainerExtension.csproj
index 8545055b..726bbf22 100644
--- a/iOSExtensions/ShareExtension/AppContainerExtension/AppContainerExtension.csproj
+++ b/iOSExtensions/ShareExtension/AppContainerExtension/AppContainerExtension.csproj
@@ -1,6 +1,6 @@
- net8.0-ios
+ net9.0-ios
Library
com.vladislavantonyuk.container.container-ShareExtension
diff --git a/md/thankyou.mdpp b/md/thankyou.mdpp
index e5a87341..782959f2 100644
--- a/md/thankyou.mdpp
+++ b/md/thankyou.mdpp
@@ -1,3 +1,3 @@
## Thank You
-Special thanks to my friends and sponsors: @PeterFucci, Gerald Versluis (jfversluis), @renatolopes, Glen Herman, Olexii, Brady, Yury Michurin, VToegel, Aleksander Rokic, Jeffrey Williams, TimKyn, Standa Mikes, Aaron Schaefer, AIvanHeerden, 7 M O X D, gbrewer, Ryan, @janhjordie, erossiniuk, David, Sab, Andreas, plettb, Ocean Siu, Sreckcep, Standa Mikeš, cissemy
+Special thanks to my friends and sponsors: @PeterFucci, Gerald Versluis (jfversluis), @renatolopes, Glen Herman, Olexii, Brady, Yury Michurin, VToegel, Aleksander Rokic, Jeffrey Williams, TimKyn, Standa Mikes, Aaron Schaefer, AIvanHeerden, 7 M O X D, gbrewer, Ryan, @janhjordie, erossiniuk, David, Sab, Andreas, plettb, Ocean Siu, Sreckcep, Standa Mikeš, becks120, cissemy