From b80071c5247f2619d24e98dcdf898526ae0dbf4d Mon Sep 17 00:00:00 2001 From: polarboy Date: Mon, 22 Jul 2024 08:29:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=20ArrowDecoratedBoxTheme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArrowDecoratedBoxTheme.cs | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/AtomUI.Controls/ArrowDecoratedBox/ArrowDecoratedBoxTheme.cs diff --git a/src/AtomUI.Controls/ArrowDecoratedBox/ArrowDecoratedBoxTheme.cs b/src/AtomUI.Controls/ArrowDecoratedBox/ArrowDecoratedBoxTheme.cs new file mode 100644 index 000000000..6ca957755 --- /dev/null +++ b/src/AtomUI.Controls/ArrowDecoratedBox/ArrowDecoratedBoxTheme.cs @@ -0,0 +1,51 @@ +using AtomUI.Controls.Utils; +using AtomUI.Styling; +using Avalonia.Controls; +using Avalonia.Controls.Templates; +using Avalonia.Styling; + +namespace AtomUI.Controls; + +[ControlThemeProvider] +public class ArrowDecoratedBoxTheme : ControlTheme +{ + public const string DecoratorPart = "Part_Decorator"; + + public ArrowDecoratedBoxTheme() : base(typeof(ArrowDecoratedBox)) {} + + protected override IControlTemplate BuildControlTemplate() + { + return new FuncControlTemplate((box, scope) => + { + var decorator = new Border() + { + Name = DecoratorPart + }; + decorator.RegisterInNameScope(scope); + + if (box.Child?.Parent is not null) { + UIStructureUtils.ClearLogicalParentRecursive(box.Child, null); + UIStructureUtils.ClearVisualParentRecursive(box.Child, null); + } + + CreateTemplateParentBinding(decorator, Border.BackgroundSizingProperty, ArrowDecoratedBox.BackgroundSizingProperty); + CreateTemplateParentBinding(decorator, Border.BackgroundProperty, ArrowDecoratedBox.BackgroundProperty); + CreateTemplateParentBinding(decorator, Border.CornerRadiusProperty, ArrowDecoratedBox.CornerRadiusProperty); + CreateTemplateParentBinding(decorator, Border.ChildProperty, ArrowDecoratedBox.ChildProperty); + CreateTemplateParentBinding(decorator, Border.PaddingProperty, ArrowDecoratedBox.PaddingProperty); + + return decorator; + }); + } + + protected override void BuildStyles() + { + var commonStyle = new Style(selector => selector.Nesting()); + commonStyle.Add(ArrowDecoratedBox.BackgroundProperty, GlobalResourceKey.ColorBgContainer); + commonStyle.Add(ArrowDecoratedBox.MinHeightProperty, GlobalResourceKey.ControlHeight); + commonStyle.Add(ArrowDecoratedBox.PaddingProperty, ArrowDecoratedBoxResourceKey.Padding); + commonStyle.Add(ArrowDecoratedBox.ArrowSizeProperty, ArrowDecoratedBoxResourceKey.ArrowSize); + commonStyle.Add(ArrowDecoratedBox.CornerRadiusProperty, GlobalResourceKey.BorderRadius); + Add(commonStyle); + } +} \ No newline at end of file