diff --git a/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml b/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml
index 4987e8979ea..3adffed5f70 100644
--- a/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml
+++ b/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml
@@ -72,6 +72,14 @@
+
+
+
+
+
+
+
@@ -82,6 +90,14 @@
+
+
+
+
+
+
+
diff --git a/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml.cs b/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml.cs
index 243bc5868b1..0a81133bae2 100644
--- a/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml.cs
+++ b/samples/ControlCatalog/Pages/DrawerPage/DrawerPageCustomizationPage.xaml.cs
@@ -1,8 +1,10 @@
using System.Linq;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
+using Avalonia.Controls.Templates;
using Avalonia.Input.GestureRecognizers;
using Avalonia.Interactivity;
+using Avalonia.Layout;
using Avalonia.Media;
namespace ControlCatalog.Pages
@@ -164,7 +166,7 @@ private void OnShowHeaderToggled(object? sender, RoutedEventArgs e)
if (!_isLoaded)
return;
if (ShowHeaderCheck.IsChecked == true)
- DemoDrawer.DrawerHeader = DrawerHeaderBorder;
+ DemoDrawer.DrawerHeader = HeaderTemplateCombo.SelectedIndex == 0 ? DrawerHeaderBorder : (object)"My Application";
else
DemoDrawer.DrawerHeader = null;
}
@@ -174,9 +176,128 @@ private void OnShowFooterToggled(object? sender, RoutedEventArgs e)
if (!_isLoaded)
return;
if (ShowFooterCheck.IsChecked == true)
- DemoDrawer.DrawerFooter = DrawerFooterBorder;
+ {
+ DemoDrawer.DrawerFooter = FooterTemplateCombo.SelectedIndex switch
+ {
+ 1 => (object)"v12.0",
+ 2 => (object)"Avalonia",
+ _ => DrawerFooterBorder
+ };
+ }
else
+ {
DemoDrawer.DrawerFooter = null;
+ }
+ }
+
+ private void OnHeaderTemplateChanged(object? sender, SelectionChangedEventArgs e)
+ {
+ if (!_isLoaded)
+ return;
+
+ switch (HeaderTemplateCombo.SelectedIndex)
+ {
+ case 1:
+ DemoDrawer.DrawerHeader = "My Application";
+ DemoDrawer.DrawerHeaderTemplate = new FuncDataTemplate((data, _) =>
+ new Border
+ {
+ Padding = new Avalonia.Thickness(16),
+ Child = new StackPanel
+ {
+ Spacing = 2,
+ Children =
+ {
+ new TextBlock { Text = data, FontSize = 18, FontWeight = FontWeight.SemiBold, Foreground = Brushes.White },
+ new TextBlock { Text = "Navigation", FontSize = 12, Foreground = Brushes.White, Opacity = 0.7 }
+ }
+ }
+ });
+ break;
+
+ case 2:
+ DemoDrawer.DrawerHeader = "My Application";
+ DemoDrawer.DrawerHeaderTemplate = new FuncDataTemplate((data, _) =>
+ {
+ var initial = data?.Length > 0 ? data[0].ToString().ToUpperInvariant() : "?";
+ var avatar = new Border
+ {
+ Width = 40,
+ Height = 40,
+ CornerRadius = new Avalonia.CornerRadius(20),
+ Background = new SolidColorBrush(Color.Parse("#1976D2")),
+ Child = new TextBlock
+ {
+ Text = initial,
+ FontSize = 18,
+ FontWeight = FontWeight.Bold,
+ Foreground = Brushes.White,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center
+ }
+ };
+ var label = new TextBlock { Text = data, FontSize = 14, FontWeight = FontWeight.SemiBold, VerticalAlignment = VerticalAlignment.Center };
+ var row = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 10 };
+ row.Children.Add(avatar);
+ row.Children.Add(label);
+ return new Border { Padding = new Avalonia.Thickness(12), Child = row };
+ });
+ break;
+
+ default:
+ DemoDrawer.DrawerHeader = DrawerHeaderBorder;
+ DemoDrawer.DrawerHeaderTemplate = null;
+ break;
+ }
+ }
+
+ private void OnFooterTemplateChanged(object? sender, SelectionChangedEventArgs e)
+ {
+ if (!_isLoaded)
+ return;
+
+ switch (FooterTemplateCombo.SelectedIndex)
+ {
+ case 1:
+ DemoDrawer.DrawerFooter = "v12.0";
+ DemoDrawer.DrawerFooterTemplate = new FuncDataTemplate((data, _) =>
+ new Border
+ {
+ Padding = new Avalonia.Thickness(12, 8),
+ Child = new Border
+ {
+ Padding = new Avalonia.Thickness(8, 4),
+ CornerRadius = new Avalonia.CornerRadius(4),
+ Background = new SolidColorBrush(Color.Parse("#1976D2")),
+ Child = new TextBlock { Text = data, FontSize = 11, Foreground = Brushes.White, FontWeight = FontWeight.SemiBold }
+ }
+ });
+ break;
+
+ case 2:
+ DemoDrawer.DrawerFooter = "Avalonia";
+ DemoDrawer.DrawerFooterTemplate = new FuncDataTemplate((data, _) =>
+ {
+ var icon = new PathIcon
+ {
+ Width = 14,
+ Height = 14,
+ Data = Geometry.Parse("M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"),
+ Opacity = 0.5
+ };
+ var label = new TextBlock { Text = data, FontSize = 12, Opacity = 0.6, VerticalAlignment = VerticalAlignment.Center };
+ var row = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 6 };
+ row.Children.Add(icon);
+ row.Children.Add(label);
+ return new Border { Padding = new Avalonia.Thickness(14, 10), Child = row };
+ });
+ break;
+
+ default:
+ DemoDrawer.DrawerFooter = DrawerFooterBorder;
+ DemoDrawer.DrawerFooterTemplate = null;
+ break;
+ }
}
private void OnMenuItemClick(object? sender, RoutedEventArgs e)
diff --git a/src/Avalonia.Controls/Page/DrawerPage.cs b/src/Avalonia.Controls/Page/DrawerPage.cs
index f8e039f8cd6..e2cefeb5d91 100644
--- a/src/Avalonia.Controls/Page/DrawerPage.cs
+++ b/src/Avalonia.Controls/Page/DrawerPage.cs
@@ -124,6 +124,18 @@ public class DrawerPage : Page
public static readonly StyledProperty