Refactor TabControl

This commit is contained in:
chinboy
2025-03-04 08:46:44 +08:00
parent d8ed2d867a
commit 4d49fe520c
9 changed files with 76 additions and 76 deletions
@@ -24,7 +24,7 @@ internal class SegmentedTheme : BaseControlTheme
{
return new FuncControlTemplate<Segmented>((segmented, scope) =>
{
var Frame = new Border
var frame = new Border
{
Name = FramePart,
ClipToBounds = true
@@ -41,12 +41,12 @@ internal class SegmentedTheme : BaseControlTheme
})
};
itemsPresenter.RegisterInNameScope(scope);
Frame.Child = itemsPresenter;
frame.Child = itemsPresenter;
CreateTemplateParentBinding(Frame, Border.CornerRadiusProperty,
CreateTemplateParentBinding(frame, Border.CornerRadiusProperty,
TemplatedControl.CornerRadiusProperty);
CreateTemplateParentBinding(Frame, Decorator.PaddingProperty, TemplatedControl.PaddingProperty);
return Frame;
CreateTemplateParentBinding(frame, Decorator.PaddingProperty, TemplatedControl.PaddingProperty);
return frame;
});
}
@@ -1,8 +1,6 @@
using AtomUI.IconPkg;
using AtomUI.IconPkg.AntDesign;
using AtomUI.IconPkg.AntDesign;
using AtomUI.Media;
using AtomUI.Theme;
using AtomUI.Theme.Data;
using AtomUI.Theme.Styling;
using AtomUI.Utils;
using Avalonia;
@@ -63,8 +61,6 @@ internal class BaseOverflowMenuItemTheme : BaseControlTheme
};
Grid.SetColumn(itemTextPresenter, 0);
menuItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(itemTextPresenter, Layoutable.MarginProperty,
MenuTokenKey.ItemMargin));
CreateTemplateParentBinding(itemTextPresenter, ContentPresenter.ContentProperty,
HeaderedSelectingItemsControl.HeaderProperty,
BindingMode.Default,
@@ -100,15 +96,6 @@ internal class BaseOverflowMenuItemTheme : BaseControlTheme
};
CreateTemplateParentBinding(closeButton, Visual.IsVisibleProperty, BaseOverflowMenuItem.IsClosableProperty);
menuItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuCloseIcon, Icon.NormalFilledBrushProperty,
SharedTokenKey.ColorIcon));
menuItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuCloseIcon, Icon.ActiveFilledBrushProperty,
SharedTokenKey.ColorIconHover));
menuItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuCloseIcon, Layoutable.WidthProperty,
SharedTokenKey.IconSizeSM));
menuItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuCloseIcon, Layoutable.HeightProperty,
SharedTokenKey.IconSizeSM));
Grid.SetColumn(menuCloseIcon, 4);
closeButton.RegisterInNameScope(scope);
@@ -123,14 +110,13 @@ internal class BaseOverflowMenuItemTheme : BaseControlTheme
protected override void BuildStyles()
{
var commonStyle = new Style(selector => selector.Nesting());
BuildCommonStyle(commonStyle);
BuildCommonStyle();
BuildDisabledStyle();
Add(commonStyle);
}
private void BuildCommonStyle(Style commonStyle)
private void BuildCommonStyle()
{
var commonStyle = new Style(selector => selector.Nesting());
commonStyle.Add(TemplatedControl.ForegroundProperty, MenuTokenKey.ItemColor);
{
var borderStyle = new Style(selector => selector.Nesting().Template().Name(ItemDecoratorPart));
@@ -161,7 +147,21 @@ internal class BaseOverflowMenuItemTheme : BaseControlTheme
borderStyle.Add(Border.BackgroundProperty, MenuTokenKey.ItemHoverBg);
hoverStyle.Add(borderStyle);
}
commonStyle.Add(hoverStyle);
var itemTextPresenterStyle = new Style(selector => selector.Nesting().Template().Name(ItemTextPresenterPart));
itemTextPresenterStyle.Add(Layoutable.MarginProperty, MenuTokenKey.ItemMargin);
commonStyle.Add(itemTextPresenterStyle);
var closeButtonStyle = new Style(selector => selector.Nesting().Template().Name(ItemCloseButtonPart));
closeButtonStyle.Add(IconButton.NormalIconColorProperty, SharedTokenKey.ColorIcon);
closeButtonStyle.Add(IconButton.ActiveIconColorProperty, SharedTokenKey.ColorIconHover);
closeButtonStyle.Add(IconButton.IconHeightProperty, SharedTokenKey.IconSizeSM);
closeButtonStyle.Add(IconButton.IconWidthProperty, SharedTokenKey.IconSizeSM);
commonStyle.Add(closeButtonStyle);
Add(commonStyle);
}
private void BuildDisabledStyle()
@@ -81,8 +81,6 @@ internal class BaseTabItemTheme : BaseControlTheme
Name = ItemCloseButtonPart
};
iconButton.RegisterInNameScope(scope);
tabItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(iconButton, Layoutable.MarginProperty,
TabControlTokenKey.CloseIconMargin));
CreateTemplateParentBinding(iconButton, IconButton.IconProperty, TabItem.CloseIconProperty);
CreateTemplateParentBinding(iconButton, Visual.IsVisibleProperty, TabItem.IsClosableProperty);
@@ -97,12 +95,17 @@ internal class BaseTabItemTheme : BaseControlTheme
commonStyle.Add(InputElement.CursorProperty,
new SetterValueFactory<Cursor>(() => new Cursor(StandardCursorType.Hand)));
commonStyle.Add(TemplatedControl.ForegroundProperty, TabControlTokenKey.ItemColor);
var itemCloseButtonStyle = new Style(selector => selector.Nesting().Template().Name(ItemCloseButtonPart));
itemCloseButtonStyle.Add(Layoutable.MarginProperty, TabControlTokenKey.CloseIconMargin);
commonStyle.Add(itemCloseButtonStyle);
// Icon 一些通用属性
{
var iconStyle = new Style(selector => selector.Nesting().Template().Name(ItemIconPart));
iconStyle.Add(Layoutable.MarginProperty, TabControlTokenKey.ItemIconMargin);
commonStyle.Add(iconStyle);
}
// hover
@@ -48,18 +48,12 @@ internal class BaseTabScrollViewerTheme : BaseControlTheme
menuIndicatorIcon.HorizontalAlignment = HorizontalAlignment.Center;
menuIndicatorIcon.VerticalAlignment = VerticalAlignment.Center;
scrollViewer.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuIndicatorIcon, Icon.NormalFilledBrushProperty,
SharedTokenKey.ColorTextSecondary));
var menuIndicator = new IconButton
{
Name = ScrollMenuIndicatorPart,
Icon = menuIndicatorIcon
};
scrollViewer.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuIndicator, IconButton.IconWidthProperty,
SharedTokenKey.IconSize));
scrollViewer.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(menuIndicator, IconButton.IconHeightProperty,
SharedTokenKey.IconSize));
menuIndicator.RegisterInNameScope(scope);
var scrollViewContent = CreateScrollContentPresenter();
@@ -110,6 +104,7 @@ internal class BaseTabScrollViewerTheme : BaseControlTheme
CreateTemplateParentBinding(scrollViewContent, ScrollContentPresenter.VerticalSnapPointsTypeProperty,
ScrollViewer.VerticalSnapPointsTypeProperty);
var scrollGestureRecognizer = new ScrollGestureRecognizer();
BindUtils.RelayBind(scrollViewContent, ScrollContentPresenter.CanHorizontallyScrollProperty,
scrollGestureRecognizer,
ScrollGestureRecognizer.CanHorizontallyScrollProperty);
@@ -136,6 +131,9 @@ internal class BaseTabScrollViewerTheme : BaseControlTheme
new Style(selector => selector.Nesting().Template().Name(ScrollMenuIndicatorPart));
menuIndicatorStyle.Add(DockPanel.DockProperty, Dock.Right);
menuIndicatorStyle.Add(TemplatedControl.PaddingProperty, TabControlTokenKey.MenuIndicatorPaddingHorizontal);
menuIndicatorStyle.Add(IconButton.NormalIconColorProperty, SharedTokenKey.ColorTextSecondary);
menuIndicatorStyle.Add(IconButton.IconWidthProperty, SharedTokenKey.IconSize);
menuIndicatorStyle.Add(IconButton.IconHeightProperty, SharedTokenKey.IconSize);
var startEdgeIndicatorStyle =
new Style(selector => selector.Nesting().Template().Name(ScrollStartEdgeIndicatorPart));
@@ -53,36 +53,21 @@ internal class CardTabControlTheme : BaseTabControlTheme
var contentPanel = CreateTabStripContentPanel(scope);
tabScrollViewer.Content = contentPanel;
tabScrollViewer.TabControl = baseTabControl;
var addTabIcon = AntDesignIconPackage.PlusOutlined();
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Icon.NormalFilledBrushProperty,
TabControlTokenKey.ItemColor));
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Icon.ActiveFilledBrushProperty,
TabControlTokenKey.ItemHoverColor));
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Icon.DisabledFilledBrushProperty,
SharedTokenKey.ColorTextDisabled));
var addTabButton = new IconButton
{
Name = AddTabButtonPart,
BorderThickness = new Thickness(1),
Icon = addTabIcon
Icon = AntDesignIconPackage.PlusOutlined()
};
DockPanel.SetDock(addTabButton, Dock.Right);
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabButton, IconButton.IconHeightProperty,
SharedTokenKey.IconSize));
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabButton, IconButton.IconWidthProperty,
SharedTokenKey.IconSize));
CreateTemplateParentBinding(addTabButton, TemplatedControl.BorderThicknessProperty,
CardTabControl.CardBorderThicknessProperty);
CreateTemplateParentBinding(addTabButton, TemplatedControl.CornerRadiusProperty,
CardTabControl.CardBorderRadiusProperty);
CreateTemplateParentBinding(addTabButton, Visual.IsVisibleProperty, CardTabControl.IsShowAddTabButtonProperty);
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabButton, TemplatedControl.BorderBrushProperty,
SharedTokenKey.ColorBorderSecondary));
addTabButton.RegisterInNameScope(scope);
cardTabControlContainer.TabScrollViewer = tabScrollViewer;
@@ -109,6 +94,17 @@ internal class CardTabControlTheme : BaseTabControlTheme
{
base.BuildStyles();
var commonStyle = new Style(selector => selector.Nesting());
{
var addTabButtonStyle = new Style(selector => selector.Nesting().Template().Name(AddTabButtonPart));
addTabButtonStyle.Add(IconButton.NormalIconColorProperty, TabControlTokenKey.ItemColor);
addTabButtonStyle.Add(IconButton.ActiveIconColorProperty, TabControlTokenKey.ItemHoverColor);
addTabButtonStyle.Add(IconButton.DisabledIconColorProperty, SharedTokenKey.ColorTextDisabled);
addTabButtonStyle.Add(TemplatedControl.BorderBrushProperty, SharedTokenKey.ColorBorderSecondary);
addTabButtonStyle.Add(IconButton.IconHeightProperty, SharedTokenKey.IconSize);
addTabButtonStyle.Add(IconButton.IconWidthProperty, SharedTokenKey.IconSize);
commonStyle.Add(addTabButtonStyle);
}
// 设置 items presenter 面板样式
// 分为上、右、下、左
@@ -59,9 +59,6 @@ internal class TabControlTheme : BaseTabControlTheme
Name = SelectedItemIndicatorPart
};
border.RegisterInNameScope(scope);
baseTabControl.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(border,
Border.BackgroundProperty,
TabControlTokenKey.InkBarColor));
layout.Children.Add(itemsPresenter);
layout.Children.Add(border);
@@ -74,6 +71,11 @@ internal class TabControlTheme : BaseTabControlTheme
base.BuildStyles();
var commonStyle = new Style(selector => selector.Nesting());
{
var indicatorStyle = new Style(selector => selector.Nesting().Template().Name(SelectedItemIndicatorPart));
indicatorStyle.Add(Border.BackgroundProperty, TabControlTokenKey.InkBarColor);
commonStyle.Add(indicatorStyle);
}
// 设置 items presenter 面板样式
// 分为上、右、下、左
{
@@ -90,8 +92,8 @@ internal class TabControlTheme : BaseTabControlTheme
var indicatorStyle = new Style(selector => selector.Nesting().Template().Name(SelectedItemIndicatorPart));
indicatorStyle.Add(Layoutable.HorizontalAlignmentProperty, HorizontalAlignment.Left);
indicatorStyle.Add(Layoutable.VerticalAlignmentProperty, VerticalAlignment.Bottom);
topStyle.Add(indicatorStyle);
topStyle.Add(itemPresenterPanelStyle);
commonStyle.Add(topStyle);
}
@@ -80,8 +80,6 @@ internal class BaseTabStripItemTheme : BaseControlTheme
Name = ItemCloseButtonPart
};
iconButton.RegisterInNameScope(scope);
stripItem.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(iconButton,
Layoutable.MarginProperty, TabControlTokenKey.CloseIconMargin));
CreateTemplateParentBinding(iconButton, IconButton.IconProperty, TabStripItem.CloseIconProperty);
CreateTemplateParentBinding(iconButton, Visual.IsVisibleProperty, TabStripItem.IsClosableProperty);
@@ -97,6 +95,10 @@ internal class BaseTabStripItemTheme : BaseControlTheme
new SetterValueFactory<Cursor>(() => new Cursor(StandardCursorType.Hand)));
commonStyle.Add(TemplatedControl.ForegroundProperty, TabControlTokenKey.ItemColor);
var itemCloseButtonStyle = new Style(selector => selector.Nesting().Template().Name(ItemCloseButtonPart));
itemCloseButtonStyle.Add(Layoutable.MarginProperty, TabControlTokenKey.CloseIconMargin);
commonStyle.Add(itemCloseButtonStyle);
// Icon 一些通用属性
{
var iconStyle = new Style(selector => selector.Nesting().Template().Name(ItemIconPart));
@@ -49,25 +49,11 @@ internal class CardTabStripTheme : BaseTabStripTheme
tabScrollViewer.Content = contentPanel;
tabScrollViewer.TabStrip = baseTabStrip;
var addTabIcon = AntDesignIconPackage.PlusOutlined();
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Icon.NormalFilledBrushProperty,
TabControlTokenKey.ItemColor));
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Icon.ActiveFilledBrushProperty,
TabControlTokenKey.ItemHoverColor));
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Icon.DisabledFilledBrushProperty,
SharedTokenKey.ColorTextDisabled));
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Layoutable.WidthProperty,
SharedTokenKey.IconSize));
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabIcon, Layoutable.HeightProperty,
SharedTokenKey.IconSize));
var addTabButton = new IconButton
{
Name = AddTabButtonPart,
BorderThickness = new Thickness(1),
Icon = addTabIcon
Icon = AntDesignIconPackage.PlusOutlined()
};
CreateTemplateParentBinding(addTabButton, TemplatedControl.BorderThicknessProperty,
@@ -76,9 +62,6 @@ internal class CardTabStripTheme : BaseTabStripTheme
CardTabStrip.CardBorderRadiusProperty);
CreateTemplateParentBinding(addTabButton, Visual.IsVisibleProperty, CardTabStrip.IsShowAddTabButtonProperty);
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(addTabButton, TemplatedControl.BorderBrushProperty,
SharedTokenKey.ColorBorderSecondary));
addTabButton.RegisterInNameScope(scope);
cardTabStripContainer.TabScrollViewer = tabScrollViewer;
@@ -106,6 +89,18 @@ internal class CardTabStripTheme : BaseTabStripTheme
base.BuildStyles();
var commonStyle = new Style(selector => selector.Nesting());
{
var addTabButtonStyle = new Style(selector => selector.Nesting().Template().Name(AddTabButtonPart));
addTabButtonStyle.Add(IconButton.NormalIconColorProperty, TabControlTokenKey.ItemColor);
addTabButtonStyle.Add(IconButton.ActiveIconColorProperty, TabControlTokenKey.ItemHoverColor);
addTabButtonStyle.Add(IconButton.DisabledIconColorProperty, SharedTokenKey.ColorTextDisabled);
addTabButtonStyle.Add(IconButton.IconWidthProperty, SharedTokenKey.IconSize);
addTabButtonStyle.Add(IconButton.IconHeightProperty, SharedTokenKey.IconSize);
addTabButtonStyle.Add(TemplatedControl.BorderBrushProperty, SharedTokenKey.ColorBorderSecondary);
commonStyle.Add(addTabButtonStyle);
}
// 设置 items presenter 面板样式
// 分为上、右、下、左
{
@@ -54,8 +54,6 @@ internal class TabStripTheme : BaseTabStripTheme
Name = SelectedItemIndicatorPart
};
border.RegisterInNameScope(scope);
baseTabStrip.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(border, Border.BackgroundProperty,
TabControlTokenKey.InkBarColor));
layout.Children.Add(itemsPresenter);
layout.Children.Add(border);
@@ -68,6 +66,12 @@ internal class TabStripTheme : BaseTabStripTheme
base.BuildStyles();
var commonStyle = new Style(selector => selector.Nesting());
{
var indicatorStyle = new Style(selector => selector.Nesting().Template().Name(SelectedItemIndicatorPart));
indicatorStyle.Add(Border.BackgroundProperty, TabControlTokenKey.InkBarColor);
commonStyle.Add(indicatorStyle);
}
// 设置 items presenter 面板样式
// 分为上、右、下、左
{