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