diff --git a/demo/Ursa.Demo/App.axaml b/demo/Ursa.Demo/App.axaml
index 342fcd6..abf9048 100644
--- a/demo/Ursa.Demo/App.axaml
+++ b/demo/Ursa.Demo/App.axaml
@@ -5,6 +5,6 @@
xmlns:u-semi="https://irihi.tech/ursa/themes/semi">
-
+
\ No newline at end of file
diff --git a/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs b/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs
index 9caceef..f48b834 100644
--- a/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs
+++ b/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs
@@ -2,6 +2,7 @@
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
using Avalonia.Data;
+using Ursa.Controls;
using Ursa.Demo.ViewModels;
namespace Ursa.Demo.Converters;
@@ -18,6 +19,7 @@ public class ToolBarItemTemplateSelector: IDataTemplate
{
[!ContentControl.ContentProperty] = new Binding() { Path = "Content" },
[!Button.CommandProperty] = new Binding() { Path = "Command" },
+ [!ToolBar.OverflowModeProperty] = new Binding(){ Path = "OverflowMode" }
};
}
if (param is ToolBarCheckBoxItemViweModel cb)
@@ -27,6 +29,7 @@ public class ToolBarItemTemplateSelector: IDataTemplate
[!ContentControl.ContentProperty] = new Binding() { Path = "Content" },
[!ToggleButton.IsCheckedProperty] = new Binding() { Path = "IsChecked" },
[!Button.CommandProperty] = new Binding() { Path = "Command" },
+ [!ToolBar.OverflowModeProperty] = new Binding(){ Path = "OverflowMode" }
};
}
if (param is ToolBarComboBoxItemViewModel combo)
@@ -36,6 +39,7 @@ public class ToolBarItemTemplateSelector: IDataTemplate
[!ContentControl.ContentProperty] = new Binding() { Path = "Content" },
[!SelectingItemsControl.SelectedItemProperty] = new Binding() { Path = "SelectedItem" },
[!ItemsControl.ItemsSourceProperty] = new Binding() { Path = "Items" },
+ [!ToolBar.OverflowModeProperty] = new Binding(){ Path = "OverflowMode" }
};
}
return new Button() { Content = "Undefined Item" };
diff --git a/demo/Ursa.Demo/ViewModels/ToolBarDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/ToolBarDemoViewModel.cs
index ad510d9..d154f0e 100644
--- a/demo/Ursa.Demo/ViewModels/ToolBarDemoViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/ToolBarDemoViewModel.cs
@@ -13,11 +13,11 @@ public partial class ToolBarDemoViewModel: ObservableObject
{
Items = new()
{
- new ToolBarButtonItemViewModel() { Content = "New" },
+ new ToolBarButtonItemViewModel() { Content = "New", OverflowMode = OverflowMode.AsNeeded},
new ToolBarButtonItemViewModel() { Content = "Open" },
new ToolBarButtonItemViewModel() { Content = "Save" },
new ToolBarCheckBoxItemViweModel() { Content = "Bold" },
- new ToolBarCheckBoxItemViweModel() { Content = "Italic" },
+ new ToolBarCheckBoxItemViweModel() { Content = "Italic", OverflowMode = OverflowMode.Never},
new ToolBarComboBoxItemViewModel() { Content = "Font Size", Items = new (){ "10", "12", "14" } }
};
}
@@ -25,7 +25,7 @@ public partial class ToolBarDemoViewModel: ObservableObject
public abstract class ToolBarItemViewModel: ObservableObject
{
-
+ public OverflowMode OverflowMode { get; set; }
}
public class ToolBarButtonItemViewModel: ToolBarItemViewModel
diff --git a/src/Ursa.Themes.Semi/Controls/ToolBar.axaml b/src/Ursa.Themes.Semi/Controls/ToolBar.axaml
index 7f1d026..ab349f5 100644
--- a/src/Ursa.Themes.Semi/Controls/ToolBar.axaml
+++ b/src/Ursa.Themes.Semi/Controls/ToolBar.axaml
@@ -23,8 +23,8 @@
Fill="Gray" />
-
-
+
+
diff --git a/src/Ursa/Controls/ToolBar/ToolBar.cs b/src/Ursa/Controls/ToolBar/ToolBar.cs
index 0582c65..eefc2bb 100644
--- a/src/Ursa/Controls/ToolBar/ToolBar.cs
+++ b/src/Ursa/Controls/ToolBar/ToolBar.cs
@@ -36,6 +36,12 @@ public class ToolBar: HeaderedItemsControl
set => SetValue(BandProperty, value);
}
+ public static readonly AttachedProperty OverflowModeProperty =
+ AvaloniaProperty.RegisterAttached("OverflowMode");
+
+ public static void SetOverflowMode(Control? obj, OverflowMode value) => obj.SetValue(OverflowModeProperty, value);
+ public static OverflowMode GetOverflowMode(Control? obj) => obj.GetValue(OverflowModeProperty);
+
static ToolBar()
{
IsTabStopProperty.OverrideDefaultValue(false);
diff --git a/src/Ursa/Controls/ToolBar/ToolBarPanel.cs b/src/Ursa/Controls/ToolBar/ToolBarPanel.cs
index 288d0e4..c71558e 100644
--- a/src/Ursa/Controls/ToolBar/ToolBarPanel.cs
+++ b/src/Ursa/Controls/ToolBar/ToolBarPanel.cs
@@ -28,7 +28,24 @@ public class ToolBarPanel: StackPanel
protected override Size MeasureOverride(Size availableSize)
{
- return base.MeasureOverride(availableSize);
-
+ var size = base.MeasureOverride(availableSize);
+ var children = this.Children;
+ var children2 = this.OverflowPanel?.Children;
+ var all = children.ToList();
+ if (children2 != null)
+ {
+ all.AddRange(children2);
+ }
+ this.Children.Clear();
+ OverflowPanel?.Children.Clear();
+ for (int i = 0; i < all.Count - 1; i++)
+ {
+ this.Children.Add(all[i]);
+ }
+ if (all.Count > 0)
+ {
+ OverflowPanel?.Children.Add(all.Last());
+ }
+ return size;
}
}
\ No newline at end of file