diff --git a/src/Controls/src/Core/Controls.Core-net6.csproj b/src/Controls/src/Core/Controls.Core-net6.csproj
index 75d5d3b9b772..41c4e7450445 100644
--- a/src/Controls/src/Core/Controls.Core-net6.csproj
+++ b/src/Controls/src/Core/Controls.Core-net6.csproj
@@ -7,6 +7,7 @@
false
<_MauiDesignDllBuild Condition=" '$(OS)' != 'Unix' And '$(MSBuildRuntimeType)' == 'Full'">True
high
+ Platform\Tizen\
@@ -29,6 +30,11 @@
+
+
+
+
+
diff --git a/src/Controls/src/Core/Controls.Core.csproj b/src/Controls/src/Core/Controls.Core.csproj
index 07f29b4fef0d..3edb2962b28f 100644
--- a/src/Controls/src/Core/Controls.Core.csproj
+++ b/src/Controls/src/Core/Controls.Core.csproj
@@ -4,6 +4,7 @@
Microsoft.Maui.Controls
Microsoft.Maui.Controls
Platform\Android\
+ Platform\Tizen\
Microsoft.Maui.Controls
@@ -24,6 +25,10 @@
+
+
+
+
diff --git a/src/Controls/src/Core/Handlers/Shell/ShellHandler.Tizen.cs b/src/Controls/src/Core/Handlers/Shell/ShellHandler.Tizen.cs
index cbd367a4a526..712d2ab78e9d 100644
--- a/src/Controls/src/Core/Handlers/Shell/ShellHandler.Tizen.cs
+++ b/src/Controls/src/Core/Handlers/Shell/ShellHandler.Tizen.cs
@@ -1,11 +1,19 @@
-using System;
+using Microsoft.Maui.Controls.Platform;
using Microsoft.Maui.Handlers;
-using Tizen.UIExtensions.ElmSharp;
namespace Microsoft.Maui.Controls.Handlers
{
- public partial class ShellHandler : ViewHandler
+ public partial class ShellHandler : ViewHandler
{
- protected override NavigationDrawer CreateNativeView() => new NavigationDrawer(NativeParent);
+ public override void SetVirtualView(IView view)
+ {
+ base.SetVirtualView(view);
+ NativeView.SetElement((Shell)view, MauiContext);
+ }
+
+ protected override ShellView CreateNativeView()
+ {
+ return new ShellView(NativeParent);
+ }
}
}
diff --git a/src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs b/src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs
index 1c11cd09f35d..607612f3e6c5 100644
--- a/src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs
+++ b/src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs
@@ -10,7 +10,7 @@ public static partial class AppHostBuilderExtensions
{
static readonly Dictionary DefaultMauiControlHandlers = new Dictionary
{
-#if WINDOWS || __ANDROID__
+#if WINDOWS || __ANDROID__ || TIZEN
{ typeof(Shell), typeof(ShellHandler) },
#endif
{ typeof(Application), typeof(ApplicationHandler) },
diff --git a/src/Controls/src/Core/Platform/Tizen/Extensions/ShellExtensions.cs b/src/Controls/src/Core/Platform/Tizen/Extensions/ShellExtensions.cs
new file mode 100644
index 000000000000..d8e86a15b88e
--- /dev/null
+++ b/src/Controls/src/Core/Platform/Tizen/Extensions/ShellExtensions.cs
@@ -0,0 +1,117 @@
+using Tizen.UIExtensions.Common;
+using TINavigtaionView = Tizen.UIExtensions.Shell.INavigationView;
+
+namespace Microsoft.Maui.Controls.Platform
+{
+ public static class ShellExtensions
+ {
+ static double s_navigationViewFlyoutItemHeight = -1;
+ public static double GetFlyoutItemHeight(this TINavigtaionView nav)
+ {
+ if (s_navigationViewFlyoutItemHeight > 0)
+ return s_navigationViewFlyoutItemHeight;
+ return s_navigationViewFlyoutItemHeight = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(60);
+ }
+
+ static double s_navigationViewFlyoutItemWidth = -1;
+ public static double GetFlyoutItemWidth(this TINavigtaionView nav)
+ {
+ if (s_navigationViewFlyoutItemWidth > 0)
+ return s_navigationViewFlyoutItemWidth;
+ return s_navigationViewFlyoutItemWidth = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(200);
+ }
+
+ static double s_navigationViewFlyoutIconColumnSize = -1;
+ public static double GetFlyoutIconColumnSize(this TINavigtaionView nav)
+ {
+ if (s_navigationViewFlyoutIconColumnSize > 0)
+ return s_navigationViewFlyoutIconColumnSize;
+ return s_navigationViewFlyoutIconColumnSize = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(40);
+ }
+
+ static double s_navigationViewFlyoutIconSize = -1;
+ public static double GetFlyoutIconSize(this TINavigtaionView nav)
+ {
+ if (s_navigationViewFlyoutIconSize > 0)
+ return s_navigationViewFlyoutIconSize;
+ return s_navigationViewFlyoutIconSize = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(25);
+ }
+
+ static double s_navigationViewFlyoutMargin = -1;
+ public static double GetFlyoutMargin(this TINavigtaionView nav)
+ {
+ if (s_navigationViewFlyoutMargin > 0)
+ return s_navigationViewFlyoutMargin;
+ return s_navigationViewFlyoutMargin = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(10);
+ }
+
+ static double s_navigationViewFlyoutItemFontSize = -1;
+ public static double GetFlyoutItemFontSize(this TINavigtaionView nav)
+ {
+ if (s_navigationViewFlyoutItemFontSize > 0)
+ return s_navigationViewFlyoutItemFontSize;
+ return s_navigationViewFlyoutItemFontSize = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(25);
+ }
+
+ #region ShellMoreToolbar
+
+ static double s_shellMoreToolBarIconPadding = -1;
+ public static double GetIconPadding(this ShellMoreTabs self)
+ {
+ if (s_shellMoreToolBarIconPadding > 0)
+ return s_shellMoreToolBarIconPadding;
+ return s_shellMoreToolBarIconPadding = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(15);
+ }
+
+ static double s_shellMoreToolBarIconSize = -1;
+ public static double GetIconSize(this ShellMoreTabs self)
+ {
+ if (s_shellMoreToolBarIconSize > 0)
+ return s_shellMoreToolBarIconSize;
+ return s_shellMoreToolBarIconSize = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(30);
+ }
+ #endregion
+
+ #region ShellNavBar
+ static double s_shellNavBarDefaultHeight = -1;
+ public static double GetDefaultHeight(this ShellNavBar navBar)
+ {
+ if (s_shellNavBarDefaultHeight > 0)
+ return s_shellNavBarDefaultHeight;
+ return s_shellNavBarDefaultHeight = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(70);
+ }
+
+ static double s_shellNavBarDefaultMenuSize = -1;
+ public static double GetDefaultMenuSize(this ShellNavBar navBar)
+ {
+ if (s_shellNavBarDefaultMenuSize > 0)
+ return s_shellNavBarDefaultMenuSize;
+ return s_shellNavBarDefaultMenuSize = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(Device.Idiom == TargetIdiom.TV ? 70 : 40);
+ }
+
+ static double s_shellNavBarDefaultMargin = -1;
+ public static double GetDefaultMargin(this ShellNavBar navBar)
+ {
+ if (s_shellNavBarDefaultMargin > 0)
+ return s_shellNavBarDefaultMargin;
+ return s_shellNavBarDefaultMargin = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(10);
+ }
+
+ static double s_shellNavBarTitleVDefaultMargin = -1;
+ public static double GetDefaultTitleVMargin(this ShellNavBar navBar)
+ {
+ if (s_shellNavBarTitleVDefaultMargin > 0)
+ return s_shellNavBarTitleVDefaultMargin;
+ return s_shellNavBarTitleVDefaultMargin = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(23);
+ }
+
+ static double s_shellNavBarTitleFontSize = -1;
+ public static double GetDefaultTitleFontSize(this ShellNavBar navBar)
+ {
+ if (s_shellNavBarTitleFontSize > 0)
+ return s_shellNavBarTitleFontSize;
+ return s_shellNavBarTitleFontSize = DeviceInfo.CalculateDoubleScaledSizeInLargeScreen(23);
+ }
+ #endregion
+ }
+}
diff --git a/src/Controls/src/Core/Platform/Tizen/Resources/arrow_left.png b/src/Controls/src/Core/Platform/Tizen/Resources/arrow_left.png
new file mode 100644
index 000000000000..923dfeb34fef
Binary files /dev/null and b/src/Controls/src/Core/Platform/Tizen/Resources/arrow_left.png differ
diff --git a/src/Controls/src/Core/Platform/Tizen/Resources/dots_horizontal.png b/src/Controls/src/Core/Platform/Tizen/Resources/dots_horizontal.png
new file mode 100644
index 000000000000..63d0f4be8891
Binary files /dev/null and b/src/Controls/src/Core/Platform/Tizen/Resources/dots_horizontal.png differ
diff --git a/src/Controls/src/Core/Platform/Tizen/Resources/menu.png b/src/Controls/src/Core/Platform/Tizen/Resources/menu.png
new file mode 100644
index 000000000000..6dcfc0575a1d
Binary files /dev/null and b/src/Controls/src/Core/Platform/Tizen/Resources/menu.png differ
diff --git a/src/Controls/src/Core/Platform/Tizen/Shell/ShellFlyoutItemAdaptor.cs b/src/Controls/src/Core/Platform/Tizen/Shell/ShellFlyoutItemAdaptor.cs
new file mode 100644
index 000000000000..83a140ecaa7b
--- /dev/null
+++ b/src/Controls/src/Core/Platform/Tizen/Shell/ShellFlyoutItemAdaptor.cs
@@ -0,0 +1,170 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Microsoft.Maui.Controls.Internals;
+using Microsoft.Maui.Handlers;
+using ElmSharp;
+using Tizen.UIExtensions.ElmSharp;
+
+namespace Microsoft.Maui.Controls.Platform
+{
+ public class ShellFlyoutItemAdaptor : ItemAdaptor
+ {
+ Dictionary _nativeFormsTable = new Dictionary();
+ Dictionary