diff --git a/critterfolio/CritterFolio/CritterFolio/Navigation.axaml b/critterfolio/CritterFolio/CritterFolio/Navigation.axaml
index ca8c8d1..4138280 100644
--- a/critterfolio/CritterFolio/CritterFolio/Navigation.axaml
+++ b/critterfolio/CritterFolio/CritterFolio/Navigation.axaml
@@ -6,7 +6,12 @@
x:Class="CritterFolio.Navigation">
-
+
diff --git a/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs
index 44a546c..939e40b 100644
--- a/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using Avalonia;
@@ -18,16 +19,21 @@ public partial class Navigation : UserControl
}
}
- private Panel? _pageContainer;
+ private ContentControl? _pageContainer;
private Stack _pageStack = [];
public Navigation()
{
InitializeComponent();
+
+ BackButton.Click += (sender, args) =>
+ {
+ PopPage();
+ };
}
- public void Init(Panel pageContainer)
+ public void Init(ContentControl pageContainer)
{
_pageContainer = pageContainer;
}
@@ -57,23 +63,55 @@ public partial class Navigation : UserControl
{
HeaderButtons.Children.Remove(button);
}
+
+ public void ClearHeaderButtons()
+ {
+ HeaderButtons.Children.Clear();
+ }
public void PushPage(Page page)
{
+ Console.WriteLine($"Adding page {page.Title} to the page stack");
_pageStack.Push(page);
+ RefreshPage();
+ PrintPageStack();
}
public void PopPage()
{
+ Console.WriteLine($"Removing page {CurrentPage?.Title ?? "??"} from the page stack");
_pageStack.Pop();
+ RefreshPage();
+ PrintPageStack();
+ }
+
+ private void PrintPageStack()
+ {
+ var i = 0;
+ foreach (var page in _pageStack)
+ {
+ Console.WriteLine($"{i} - {page.Title}");
+ i++;
+ }
}
private void RefreshPage()
{
- _pageContainer?.Children.Clear();
- if (CurrentPage is null) return;
- _pageContainer?.Children.Add(CurrentPage);
+ if (_pageContainer == null || CurrentPage is null) return;
+
+ ClearHeaderButtons();
+
+ _pageContainer.Content = CurrentPage;
CurrentPage.Refresh();
+
+ if (_pageStack.Count > 1)
+ {
+ ShowBack();
+ }
+ else
+ {
+ HideBack();
+ }
}
}
\ No newline at end of file
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml
new file mode 100644
index 0000000..a57f476
--- /dev/null
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs
new file mode 100644
index 0000000..5d74e23
--- /dev/null
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs
@@ -0,0 +1,51 @@
+using System;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+using Avalonia.Media;
+
+namespace CritterFolio.Pages;
+
+public partial class HomePage : Page
+{
+ public override string Title { get; } = "Home";
+
+ public HomePage()
+ {
+ InitializeComponent();
+ }
+
+
+ public override void Refresh()
+ {
+ base.Refresh();
+
+ Sys.Navigation?.SetTitle(Title);
+
+ TestBttn.Click += TestPage;
+
+ var headBtn = new Button()
+ {
+ Classes = { "headerBttn" },
+ Content = "\ue248"
+ };
+
+ headBtn.Click += (sender, args) =>
+ {
+ Console.WriteLine("Save button clicked");
+ };
+
+ Sys.Navigation?.AddHeaderButton(headBtn);
+ }
+
+ private void TestPage(object? sender, RoutedEventArgs args)
+ {
+ Sys.Navigation?.PushPage(new TestPage());
+ }
+
+ protected override void ClearConnections()
+ {
+ TestBttn.Click -= TestPage;
+ }
+}
\ No newline at end of file
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/Page.cs b/critterfolio/CritterFolio/CritterFolio/Pages/Page.cs
index ba552bd..9a92a09 100644
--- a/critterfolio/CritterFolio/CritterFolio/Pages/Page.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/Page.cs
@@ -2,7 +2,16 @@ using Avalonia.Controls;
namespace CritterFolio.Pages;
-public abstract class Page : UserControl
+public class Page : UserControl
{
- public abstract void Refresh();
+ public virtual string? Title { get; }
+
+ public virtual void Refresh()
+ {
+ ClearConnections();
+ }
+
+ protected virtual void ClearConnections() { }
+
+
}
\ No newline at end of file
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml
new file mode 100644
index 0000000..a5f19a3
--- /dev/null
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml
@@ -0,0 +1,8 @@
+
+ Test page!
+
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs
new file mode 100644
index 0000000..67e59b7
--- /dev/null
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs
@@ -0,0 +1,27 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace CritterFolio.Pages;
+
+public partial class TestPage : Page
+{
+ public override string Title { get; } = "Test";
+
+ public TestPage()
+ {
+ InitializeComponent();
+ }
+
+ public override void Refresh()
+ {
+ ClearConnections();
+
+ Sys.Navigation?.SetTitle(Title);
+ }
+
+ protected override void ClearConnections()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml b/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml
index e0e5ebb..94c6a81 100644
--- a/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml
+++ b/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml
@@ -16,6 +16,7 @@
+
diff --git a/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml.cs
index 7d801b6..f3996e1 100644
--- a/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml.cs
@@ -1,4 +1,5 @@
using Avalonia.Controls;
+using CritterFolio.Pages;
namespace CritterFolio.Views;
@@ -8,5 +9,7 @@ public partial class MainView : UserControl
{
InitializeComponent();
Sys.Navigation = Nav;
+ Nav.Init(ScrollView);
+ Nav.PushPage(new HomePage());
}
}
\ No newline at end of file