From b9a2a0127ed1f3b6c53e4f4878f8375a7a180674 Mon Sep 17 00:00:00 2001 From: chrisbell Date: Sat, 3 Jan 2026 15:12:11 -0600 Subject: [PATCH] Finished Navigation system --- .../CritterFolio/Navigation.axaml | 7 ++- .../CritterFolio/Navigation.axaml.cs | 48 +++++++++++++++-- .../CritterFolio/Pages/HomePage.axaml | 11 ++++ .../CritterFolio/Pages/HomePage.axaml.cs | 51 +++++++++++++++++++ .../CritterFolio/CritterFolio/Pages/Page.cs | 13 ++++- .../CritterFolio/Pages/TestPage.axaml | 8 +++ .../CritterFolio/Pages/TestPage.axaml.cs | 27 ++++++++++ .../CritterFolio/Views/MainView.axaml | 1 + .../CritterFolio/Views/MainView.axaml.cs | 3 ++ 9 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml create mode 100644 critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs create mode 100644 critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml create mode 100644 critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs 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/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