diff --git a/Flow.Launcher/Resources/Controls/Card.xaml b/Flow.Launcher/Resources/Controls/Card.xaml
index bc1c42e1f..147c0e650 100644
--- a/Flow.Launcher/Resources/Controls/Card.xaml
+++ b/Flow.Launcher/Resources/Controls/Card.xaml
@@ -37,6 +37,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/Resources/Controls/Card.xaml.cs b/Flow.Launcher/Resources/Controls/Card.xaml.cs
index 06266c775..db4a136a3 100644
--- a/Flow.Launcher/Resources/Controls/Card.xaml.cs
+++ b/Flow.Launcher/Resources/Controls/Card.xaml.cs
@@ -12,10 +12,27 @@ namespace Flow.Launcher.Resources.Controls
InsideFit
}
+ public enum CardGroupPosition
+ {
+ NotInGroup,
+ First,
+ Middle,
+ Last
+ }
+
public Card()
{
InitializeComponent();
}
+
+ public CardGroupPosition GroupPosition
+ {
+ get { return (CardGroupPosition)GetValue(GroupPositionProperty); }
+ set { SetValue(GroupPositionProperty, value); }
+ }
+ public static readonly DependencyProperty GroupPositionProperty =
+ DependencyProperty.Register(nameof(GroupPosition), typeof(CardGroupPosition), typeof(Card), new PropertyMetadata(CardGroupPosition.NotInGroup));
+
public string Title
{
get { return (string)GetValue(TitleProperty); }
diff --git a/Flow.Launcher/Resources/Controls/CardGroup.xaml b/Flow.Launcher/Resources/Controls/CardGroup.xaml
new file mode 100644
index 000000000..d3383d20c
--- /dev/null
+++ b/Flow.Launcher/Resources/Controls/CardGroup.xaml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/Resources/Controls/CardGroup.xaml.cs b/Flow.Launcher/Resources/Controls/CardGroup.xaml.cs
new file mode 100644
index 000000000..6ddbf3597
--- /dev/null
+++ b/Flow.Launcher/Resources/Controls/CardGroup.xaml.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.ObjectModel;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Flow.Launcher.Resources.Controls;
+
+public partial class CardGroup : UserControl
+{
+ public new ObservableCollection Content
+ {
+ get { return (ObservableCollection)GetValue(ContentProperty); }
+ set { SetValue(ContentProperty, value); }
+ }
+
+ public static readonly DependencyProperty ContentProperty =
+ DependencyProperty.Register(nameof(Content), typeof(ObservableCollection), typeof(CardGroup));
+
+ public CardGroup()
+ {
+ InitializeComponent();
+ DataContext = this;
+ Content = new ObservableCollection();
+ }
+}
diff --git a/Flow.Launcher/Resources/Controls/CardGroupCardStyleSelector.cs b/Flow.Launcher/Resources/Controls/CardGroupCardStyleSelector.cs
new file mode 100644
index 000000000..605934e80
--- /dev/null
+++ b/Flow.Launcher/Resources/Controls/CardGroupCardStyleSelector.cs
@@ -0,0 +1,21 @@
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Flow.Launcher.Resources.Controls;
+
+public class CardGroupCardStyleSelector : StyleSelector
+{
+ public Style FirstStyle { get; set; }
+ public Style MiddleStyle { get; set; }
+ public Style LastStyle { get; set; }
+
+ public override Style SelectStyle(object item, DependencyObject container)
+ {
+ var itemsControl = ItemsControl.ItemsControlFromItemContainer(container);
+ var index = itemsControl.ItemContainerGenerator.IndexFromContainer(container);
+
+ if (index == 0) return FirstStyle;
+ if (index == itemsControl.Items.Count - 1) return LastStyle;
+ return MiddleStyle;
+ }
+}