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/Converters/MenuDataTemplateSelector.cs b/demo/Ursa.Demo/DataTemplates/MenuDataTemplateSelector.cs similarity index 100% rename from demo/Ursa.Demo/Converters/MenuDataTemplateSelector.cs rename to demo/Ursa.Demo/DataTemplates/MenuDataTemplateSelector.cs diff --git a/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs b/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs new file mode 100644 index 0000000..bfd9c76 --- /dev/null +++ b/demo/Ursa.Demo/DataTemplates/ToolBarItemTemplateSelector.cs @@ -0,0 +1,56 @@ +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Controls.Templates; +using Avalonia.Data; +using Ursa.Controls; +using Ursa.Demo.ViewModels; + +namespace Ursa.Demo.Converters; + +public class ToolBarItemTemplateSelector: IDataTemplate +{ + + public static ToolBarItemTemplateSelector Instance { get; } = new(); + public Control? Build(object? param) + { + if (param is null) return null; + if (param is ToolBarSeparatorViewModel sep) + { + return new ToolBarSeparator(); + } + if (param is ToolBarButtonItemViewModel vm) + { + return new Button() + { + [!ContentControl.ContentProperty] = new Binding() { Path = "Content" }, + [!Button.CommandProperty] = new Binding() { Path = "Command" }, + [!ToolBar.OverflowModeProperty] = new Binding(){Path = nameof(ToolBarItemViewModel.OverflowMode)}, + }; + } + if (param is ToolBarCheckBoxItemViweModel cb) + { + return new CheckBox() + { + [!ContentControl.ContentProperty] = new Binding() { Path = "Content" }, + [!ToggleButton.IsCheckedProperty] = new Binding() { Path = "IsChecked" }, + [!ToolBar.OverflowModeProperty] = new Binding(){Path = nameof(ToolBarItemViewModel.OverflowMode)}, + }; + } + if (param is ToolBarComboBoxItemViewModel combo) + { + return new ComboBox() + { + [!ContentControl.ContentProperty] = new Binding() { Path = "Content" }, + [!SelectingItemsControl.SelectedItemProperty] = new Binding() { Path = "SelectedItem" }, + [!ItemsControl.ItemsSourceProperty] = new Binding() { Path = "Items" }, + [!ToolBar.OverflowModeProperty] = new Binding(){Path = nameof(ToolBarItemViewModel.OverflowMode)}, + }; + } + return new Button() { Content = "Undefined Item" }; + } + + public bool Match(object? data) + { + return data is ToolBarItemViewModel; + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/Converters/ViewLocator.cs b/demo/Ursa.Demo/DataTemplates/ViewLocator.cs similarity index 100% rename from demo/Ursa.Demo/Converters/ViewLocator.cs rename to demo/Ursa.Demo/DataTemplates/ViewLocator.cs diff --git a/demo/Ursa.Demo/Models/MenuKeys.cs b/demo/Ursa.Demo/Models/MenuKeys.cs index 4c707a6..1351630 100644 --- a/demo/Ursa.Demo/Models/MenuKeys.cs +++ b/demo/Ursa.Demo/Models/MenuKeys.cs @@ -31,5 +31,6 @@ public static class MenuKeys public const string MenuKeyTimeline = "Timeline"; public const string MenuKeyTwoTonePathIcon = "TwoTonePathIcon"; public const string MenuKeyThemeToggler = "ThemeToggler"; + public const string MenuKeyToolBar = "ToolBar"; } \ No newline at end of file diff --git a/demo/Ursa.Demo/Pages/ToolBarDemo.axaml b/demo/Ursa.Demo/Pages/ToolBarDemo.axaml new file mode 100644 index 0000000..b00fc45 --- /dev/null +++ b/demo/Ursa.Demo/Pages/ToolBarDemo.axaml @@ -0,0 +1,136 @@ + + + + M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z + M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z + + + + + +