mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-26 11:10:34 +08:00
Refactor TabControl
This commit is contained in:
@@ -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 面板样式
|
||||
// 分为上、右、下、左
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user