diff --git a/components/Behaviors/samples/AutoSelectBehaviorSample.xaml b/components/Behaviors/samples/AutoSelectBehaviorSample.xaml
index f681e837..731655fd 100644
--- a/components/Behaviors/samples/AutoSelectBehaviorSample.xaml
+++ b/components/Behaviors/samples/AutoSelectBehaviorSample.xaml
@@ -1,10 +1,10 @@
-
-
diff --git a/components/Behaviors/samples/Behaviors.Samples.csproj b/components/Behaviors/samples/Behaviors.Samples.csproj
index 8b835c2b..2f1a83e6 100644
--- a/components/Behaviors/samples/Behaviors.Samples.csproj
+++ b/components/Behaviors/samples/Behaviors.Samples.csproj
@@ -5,6 +5,11 @@
+
+
+
+
+
diff --git a/components/Behaviors/samples/Behaviors.md b/components/Behaviors/samples/Behaviors.md
index 2f9ad2ff..7188a217 100644
--- a/components/Behaviors/samples/Behaviors.md
+++ b/components/Behaviors/samples/Behaviors.md
@@ -6,7 +6,7 @@ keywords: Behaviors
dev_langs:
- csharp
category: Xaml
-subcategory: None
+subcategory: Behaviors
discussion-id: 0
issue-id: 0
icon: Assets/Behaviors.png
diff --git a/components/Behaviors/samples/FocusBehaviorButtonSample.xaml b/components/Behaviors/samples/FocusBehaviorButtonSample.xaml
index 1e57af3e..8872a365 100644
--- a/components/Behaviors/samples/FocusBehaviorButtonSample.xaml
+++ b/components/Behaviors/samples/FocusBehaviorButtonSample.xaml
@@ -1,4 +1,4 @@
-
+ Content="Button 2" />
diff --git a/components/Behaviors/samples/Headers/FadeHeaderBehaviorSample.xaml b/components/Behaviors/samples/Headers/FadeHeaderBehaviorSample.xaml
new file mode 100644
index 00000000..af2f4ae8
--- /dev/null
+++ b/components/Behaviors/samples/Headers/FadeHeaderBehaviorSample.xaml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Eleven
+ Twelve
+ Thirteen
+ Fourteen
+ Fifteen
+ Sixteen
+ Seventeen
+ Eighteen
+ Nineteen
+ Twenty
+
+
+
diff --git a/components/Behaviors/samples/Headers/FadeHeaderBehaviorSample.xaml.cs b/components/Behaviors/samples/Headers/FadeHeaderBehaviorSample.xaml.cs
new file mode 100644
index 00000000..177a8a9c
--- /dev/null
+++ b/components/Behaviors/samples/Headers/FadeHeaderBehaviorSample.xaml.cs
@@ -0,0 +1,19 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using CommunityToolkit.WinUI.Behaviors;
+
+namespace BehaviorsExperiment.Samples;
+
+///
+/// An empty page that can be used on its own or navigated to within a Frame.
+///
+[ToolkitSample(id: nameof(FadeHeaderBehaviorSample), nameof(FadeHeaderBehavior), description: $"A sample for showing how to use the {nameof(FadeHeaderBehavior)}.")]
+public sealed partial class FadeHeaderBehaviorSample : Page
+{
+ public FadeHeaderBehaviorSample()
+ {
+ this.InitializeComponent();
+ }
+}
diff --git a/components/Behaviors/samples/Headers/HeaderBehaviors.md b/components/Behaviors/samples/Headers/HeaderBehaviors.md
new file mode 100644
index 00000000..741e784c
--- /dev/null
+++ b/components/Behaviors/samples/Headers/HeaderBehaviors.md
@@ -0,0 +1,52 @@
+---
+title: Header Behaviors
+author: michael-hawker
+description: Behaviors for modifying an element's movement/response when scrolling within a ScrollViewer.
+keywords: Behaviors
+dev_langs:
+ - csharp
+category: Xaml
+subcategory: Behaviors
+discussion-id: 0
+issue-id: 0
+icon: Assets/Behaviors.png
+---
+
+The `FadeHeaderBehavior`, `QuickReturnHeaderBehavior`, and `StickyHeaderBehavior` most commonly apply behaviors to `ListView`, `GridView`, `HeaderedItemsControl`, and `HeaderedTreeView` elements in their `Header`. It can also be applied to any element contained at the top of a `ScrollViewer`.
+
+They use composition animations to allow the visual of an element of a scrolling viewport to be manipulated for various effects.
+
+> [!WARNING]
+> Due to the use of the composition APIs, these behaviors aren't supported on Uno Platform.
+
+To use the behavior, place it on the _element in the header to be manipulated_.
+
+> [!NOTE]
+> This is different in 8.x than it was in 7.x where the behavior was placed on the parent containing element (e.g. `ListView`).
+> This change was made to enable more scenarios for these components.
+
+## FadeHeaderBehavior
+
+The FadeHeaderBehavior causes the element in the scrolling collection to fade in and out as the user scrolls at the top of the collection.
+
+> [!Sample FadeHeaderBehaviorSample]
+
+## QuickReturnBehavior
+
+The QuickReturnHeaderBehavior causes the element in the scrolling collection to return back into view as soon as the user scrolls up even if they are not near the top of the collection.
+
+> [!Sample QuickReturnHeaderBehaviorSample]
+
+It can also be used to have content quickly re-appear in any `ScrollViewer`:
+
+> [!Sample QuickReturnScrollViewerSample]
+
+## StickyHeaderBehavior
+
+The StickyHeaderBehavior causes the element in the scrolling collection to stay in view as the user scrolls up and down in the collection.
+
+> [!Sample StickyHeaderBehaviorSample]
+
+Or similarly, it can be used with a `HeaderedItemsControl` to maintain context at the top:
+
+> [!Sample StickyHeaderItemsControlSample]
diff --git a/components/Behaviors/samples/Headers/QuickReturnHeaderBehaviorSample.xaml b/components/Behaviors/samples/Headers/QuickReturnHeaderBehaviorSample.xaml
new file mode 100644
index 00000000..39f95e6f
--- /dev/null
+++ b/components/Behaviors/samples/Headers/QuickReturnHeaderBehaviorSample.xaml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Eleven
+ Twelve
+ Thirteen
+ Fourteen
+ Fifteen
+ Sixteen
+ Seventeen
+ Eighteen
+ Nineteen
+ Twenty
+ Twenty-One
+ Twenty-Two
+ Twenty-Three
+ Twenty-Four
+ Twenty-Five
+ Twenty-Six
+ Twenty-Seven
+ Twenty-Eight
+ Twenty-Nine
+ Thirty
+ Thirty-One
+ Thirty-Two
+ Thirty-Three
+ Thirty-Four
+ Thirty-Five
+ Thirty-Six
+ Thirty-Seven
+ Thirty-Eight
+ Thirty-Nine
+ Forty
+ Forty-One
+ Forty-Two
+ Forty-Three
+ Forty-Four
+ Forty-Five
+ Forty-Six
+ Forty-Seven
+ Forty-Eight
+ Forty-Nine
+ Fifty
+
+
+
diff --git a/components/Behaviors/samples/Headers/QuickReturnHeaderBehaviorSample.xaml.cs b/components/Behaviors/samples/Headers/QuickReturnHeaderBehaviorSample.xaml.cs
new file mode 100644
index 00000000..51b80f27
--- /dev/null
+++ b/components/Behaviors/samples/Headers/QuickReturnHeaderBehaviorSample.xaml.cs
@@ -0,0 +1,19 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using CommunityToolkit.WinUI.Behaviors;
+
+namespace BehaviorsExperiment.Samples;
+
+///
+/// An empty page that can be used on its own or navigated to within a Frame.
+///
+[ToolkitSample(id: nameof(QuickReturnHeaderBehaviorSample), nameof(QuickReturnHeaderBehavior), description: $"A sample for showing how to use the {nameof(QuickReturnHeaderBehavior)}.")]
+public sealed partial class QuickReturnHeaderBehaviorSample : Page
+{
+ public QuickReturnHeaderBehaviorSample()
+ {
+ this.InitializeComponent();
+ }
+}
diff --git a/components/Behaviors/samples/Headers/QuickReturnScrollViewerSample.xaml b/components/Behaviors/samples/Headers/QuickReturnScrollViewerSample.xaml
new file mode 100644
index 00000000..5528ff53
--- /dev/null
+++ b/components/Behaviors/samples/Headers/QuickReturnScrollViewerSample.xaml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/Behaviors/samples/Headers/QuickReturnScrollViewerSample.xaml.cs b/components/Behaviors/samples/Headers/QuickReturnScrollViewerSample.xaml.cs
new file mode 100644
index 00000000..6d6f7427
--- /dev/null
+++ b/components/Behaviors/samples/Headers/QuickReturnScrollViewerSample.xaml.cs
@@ -0,0 +1,19 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using CommunityToolkit.WinUI.Behaviors;
+
+namespace BehaviorsExperiment.Samples;
+
+///
+/// An empty page that can be used on its own or navigated to within a Frame.
+///
+[ToolkitSample(id: nameof(QuickReturnScrollViewerSample), $"{nameof(QuickReturnHeaderBehavior)} in a ScrollViewer", description: $"A sample for showing how to use the {nameof(QuickReturnHeaderBehavior)} in a ScrollViewer.")]
+public sealed partial class QuickReturnScrollViewerSample : Page
+{
+ public QuickReturnScrollViewerSample()
+ {
+ this.InitializeComponent();
+ }
+}
diff --git a/components/Behaviors/samples/Headers/StickyHeaderBehaviorSample.xaml b/components/Behaviors/samples/Headers/StickyHeaderBehaviorSample.xaml
new file mode 100644
index 00000000..61438908
--- /dev/null
+++ b/components/Behaviors/samples/Headers/StickyHeaderBehaviorSample.xaml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/Behaviors/samples/Headers/StickyHeaderBehaviorSample.xaml.cs b/components/Behaviors/samples/Headers/StickyHeaderBehaviorSample.xaml.cs
new file mode 100644
index 00000000..49c1ba53
--- /dev/null
+++ b/components/Behaviors/samples/Headers/StickyHeaderBehaviorSample.xaml.cs
@@ -0,0 +1,118 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using CommunityToolkit.WinUI.Behaviors;
+
+namespace BehaviorsExperiment.Samples;
+
+///
+/// An empty page that can be used on its own or navigated to within a Frame.
+///
+[ToolkitSample(id: nameof(StickyHeaderBehaviorSample), nameof(StickyHeaderBehavior), description: $"A sample for showing how to use the {nameof(StickyHeaderBehavior)}.")]
+public sealed partial class StickyHeaderBehaviorSample : Page
+{
+ public ObservableCollection Items { get; }
+
+ public StickyHeaderBehaviorSample()
+ {
+ this.InitializeComponent();
+ Items = GetData();
+ }
+
+ private ObservableCollection GetData()
+ {
+ var list = new ObservableCollection();
+ ExplorerItem folder1 = new ExplorerItem()
+ {
+ Name = "Work Documents",
+ Children =
+ {
+ new ExplorerItem()
+ {
+ Name = "Functional Specifications",
+ Children =
+ {
+ new ExplorerItem()
+ {
+ Name = "TreeView spec",
+ }
+ }
+ },
+ new ExplorerItem()
+ {
+ Name = "Feature Schedule",
+ },
+ new ExplorerItem()
+ {
+ Name = "Overall Project Plan",
+ },
+ new ExplorerItem()
+ {
+ Name = "Feature Resources Allocation",
+ }
+ }
+ };
+ ExplorerItem folder2 = new ExplorerItem()
+ {
+ Name = "Personal Folder",
+ Children =
+ {
+ new ExplorerItem()
+ {
+ Name = "Home Remodel Folder",
+ Children =
+ {
+ new ExplorerItem()
+ {
+ Name = "Contractor Contact Info",
+ },
+ new ExplorerItem()
+ {
+ Name = "Paint Color Scheme",
+ },
+ new ExplorerItem()
+ {
+ Name = "Flooring Woodgrain type",
+ },
+ new ExplorerItem()
+ {
+ Name = "Kitchen Cabinet Style",
+ }
+ }
+ }
+ }
+ };
+
+ list.Add(folder1);
+ list.Add(folder2);
+
+ for (int i = 0; i < 40; i++)
+ {
+ list.Add(new() { Name = $"Folder {i + 1}" });
+ }
+
+ return list;
+ }
+}
+
+public class ExplorerItem
+{
+ public string? Name { get; set; }
+ private ObservableCollection? _children;
+ public ObservableCollection Children
+ {
+ get
+ {
+ if (_children == null)
+ {
+ _children = new ObservableCollection();
+ }
+ return _children;
+ }
+ set
+ {
+ _children = value;
+ }
+ }
+}
diff --git a/components/Behaviors/samples/Headers/StickyHeaderItemsControlSample.xaml b/components/Behaviors/samples/Headers/StickyHeaderItemsControlSample.xaml
new file mode 100644
index 00000000..c594d072
--- /dev/null
+++ b/components/Behaviors/samples/Headers/StickyHeaderItemsControlSample.xaml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Eleven
+ Twelve
+ Thirteen
+ Fourteen
+ Fifteen
+ Sixteen
+ Seventeen
+ Eighteen
+ Nineteen
+ Twenty
+
+
+
+
diff --git a/components/Behaviors/samples/Headers/StickyHeaderItemsControlSample.xaml.cs b/components/Behaviors/samples/Headers/StickyHeaderItemsControlSample.xaml.cs
new file mode 100644
index 00000000..3ed9ea45
--- /dev/null
+++ b/components/Behaviors/samples/Headers/StickyHeaderItemsControlSample.xaml.cs
@@ -0,0 +1,20 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using CommunityToolkit.WinUI.Behaviors;
+using CommunityToolkit.WinUI.Controls;
+
+namespace BehaviorsExperiment.Samples;
+
+///
+/// An empty page that can be used on its own or navigated to within a Frame.
+///
+[ToolkitSample(id: nameof(StickyHeaderItemsControlSample), $"{nameof(StickyHeaderBehavior)} with {nameof(HeaderedItemsControl)}", description: $"A sample for showing how to use the {nameof(StickyHeaderBehavior)} with a {nameof(HeaderedItemsControl)}.")]
+public sealed partial class StickyHeaderItemsControlSample : Page
+{
+ public StickyHeaderItemsControlSample()
+ {
+ this.InitializeComponent();
+ }
+}
diff --git a/components/Behaviors/samples/InvokeActionsSample.xaml b/components/Behaviors/samples/InvokeActionsSample.xaml
index ac9cc08f..47f1e748 100644
--- a/components/Behaviors/samples/InvokeActionsSample.xaml
+++ b/components/Behaviors/samples/InvokeActionsSample.xaml
@@ -11,8 +11,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
-