using AtomUI.Media; using AtomUI.Theme.TokenSystem; using Avalonia; using Avalonia.Media; namespace AtomUI.Desktop.Controls; [ControlDesignToken] internal class DataGridToken : AbstractControlDesignToken { public const string ID = "DataGrid"; public DataGridToken() : base(ID) { } /// /// 表头背景 /// Background of table header /// public Color HeaderBg { get; set; } /// /// 表头文字颜色 /// Color of table header text /// public Color HeaderColor { get; set; } /// /// 表头排序激活态背景色 /// Background color of table header when sorted /// public Color HeaderSortActiveBg { get; set; } /// /// 表头排序激活态悬浮背景色 /// Background color of table header when sorted and hovered /// public Color HeaderSortHoverBg { get; set; } /// /// 表格排序列背景色 /// Background color of table sorted column /// public Color BodySortBg { get; set; } /// /// 表格行悬浮背景色 /// Background color of table hovered row /// public Color RowHoverBg { get; set; } /// /// 表格行选中背景色 /// Background color of table selected row /// public Color RowSelectedBg { get; set; } /// /// 表格行选中悬浮背景色 /// Background color of table selected row when hovered /// public Color RowSelectedHoverBg { get; set; } /// /// 表格行展开背景色 /// Background color of table expanded row /// public Color RowExpandedBg { get; set; } /// /// 单元格内间距(默认大尺寸) /// Padding of table cell (large size by default) /// public Thickness CellPadding { get; set; } /// /// 单元格内间距(中等尺寸) /// Padding of table cell (middle size) /// public Thickness CellPaddingMD { get; set; } /// /// 单元格内间距(小尺寸) /// Padding of table cell (small size) /// public Thickness CellPaddingSM { get; set; } /// /// 表格边框/分割线颜色 /// Border color of table /// public Color BorderColor { get; set; } /// /// 表头圆角 /// Border radius of table header /// public CornerRadius HeaderBorderRadius { get; set; } /// /// 表格底部背景色 /// Background of footer /// public Color FooterBg { get; set; } /// /// 表格底部文字颜色 /// Color of footer text /// public Color FooterColor { get; set; } /// /// 单元格文字大小(默认大尺寸) /// Font size of table cell (large size by default) /// public double CellFontSize { get; set; } /// /// 单元格文字大小(中等尺寸) /// Font size of table cell (middle size) /// public double CellFontSizeMD { get; set; } /// /// 单元格文字大小(小尺寸) /// Font size of table cell (small size) /// public double CellFontSizeSM { get; set; } /// /// 表头分割线颜色 /// Split border color of table header /// public Color HeaderSplitColor { get; set; } /// /// 固定表头排序激活态背景色 /// Background color of fixed table header when sorted /// public Color FixedHeaderSortActiveBg { get; set; } /// /// 表头过滤按钮悬浮背景色 /// Background color of table header filter button when hovered /// public Color HeaderFilterHoverBg { get; set; } /// /// 过滤下拉菜单选项背景 /// Background of filter dropdown menu item /// public Color FilterDropdownMenuBg { get; set; } /// /// 过滤下拉菜单颜色 /// Color of filter dropdown /// public Color FilterDropdownBg { get; set; } /// /// 展开按钮背景色 /// Background of expand button /// public Color ExpandIconBg { get; set; } /// /// 选择列宽度 /// Width of selection column /// public double SelectionColumnWidth { get; set; } /// /// 左侧列固定阴影 /// public BoxShadows LeftFrozenShadows { get; set; } /// /// 右侧列固定阴影 /// public BoxShadows RightFrozenShadows { get; set; } /// /// 列拖动排序时候的当前列的背景颜色 /// public Color ColumnReorderActiveBg { get; set; } /// /// 分页器的外边距 /// public Thickness PaginationMargin { get; set; } #region 内部 Token internal Thickness ExpandIconMargin { get; set; } internal double ExpandIconHalfInner { get; set; } internal double ExpandIconSize { get; set; } internal double ExpandIconScale { get; set; } internal double SortIconSize { get; set; } internal double RowReorderIndicatorSize { get; set; } internal Color HeaderIconColor { get; set; } internal Color HeaderIconHoverColor { get; set; } internal Thickness SortIndicatorLayoutMargin { get; set; } internal Thickness FilterIndicatorPadding { get; set; } #endregion #region 内部别名定义 internal double TableFontSize { get; set; } internal Color TableBg { get; set; } internal CornerRadius TableRadius { get; set; } internal Thickness TablePadding { get; set; } internal Thickness TablePaddingMiddle { get; set; } internal Thickness TablePaddingSmall { get; set; } internal Color TableBorderColor { get; set; } internal Color TableHeaderTextColor { get; set; } internal Color TableHeaderBg { get; set; } internal Color TableFooterTextColor { get; set; } internal Color TableFooterBg { get; set; } internal Color TableHeaderCellSplitColor { get; set; } internal Color TableHeaderSortBg { get; set; } internal Color TableHeaderSortHoverBg { get; set; } internal Color TableBodySortBg { get; set; } internal Color TableFixedHeaderSortActiveBg { get; set; } internal Color TableHeaderFilterActiveBg { get; set; } internal Color TableFilterDropdownBg { get; set; } internal double TableFilterButtonSpacing { get; set; } internal Thickness TableFilterButtonContainerMargin { get; set; } internal Thickness TableFilterButtonLayoutSeparatorMargin { get; set; } internal double TableFilterDropdownHeight { get; set; } internal double TableFilterDropdownWidth { get; set; } internal Thickness TableFilterDropdownPadding { get; set; } internal double TableFilterDropdownSearchWidth { get; set; } internal Color TableRowHoverBg { get; set; } internal Color TableSelectedRowBg { get; set; } internal Color TableSelectedRowHoverBg { get; set; } internal double TableFontSizeMiddle { get; set; } internal double TableFontSizeSmall { get; set; } internal double TableSelectionColumnWidth { get; set; } internal Color TableExpandIconBg { get; set; } internal double TableExpandColumnWidth { get; set; } internal Color TableExpandedRowBg { get; set; } internal CornerRadius TableTopLeftColumnCornerRadius { get; set; } #endregion public override void CalculateTokenValues(bool isDarkMode) { base.CalculateTokenValues(isDarkMode); var colorFillSecondarySolid = ColorUtils.OnBackground(SharedToken.ColorFillSecondary, SharedToken.ColorBgContainer); var colorFillContentSolid = ColorUtils.OnBackground(SharedToken.ColorFillContent, SharedToken.ColorBgContainer); var colorFillAlterSolid = ColorUtils.OnBackground(SharedToken.ColorFillAlter, SharedToken.ColorBgContainer); var baseColorAction = SharedToken.ColorIcon; var baseColorActionHover = SharedToken.ColorIconHover; var expandIconHalfInner = SharedToken.ControlInteractiveSize / 2 - SharedToken.LineWidth; var expandIconSize = expandIconHalfInner * 2 + SharedToken.LineWidth * 3; HeaderBg = colorFillAlterSolid; HeaderColor = SharedToken.ColorTextHeading; HeaderSortActiveBg = colorFillSecondarySolid; HeaderSortHoverBg = colorFillContentSolid; BodySortBg = colorFillAlterSolid; RowHoverBg = colorFillAlterSolid; RowSelectedBg = SharedToken.ControlItemBgActive; RowSelectedHoverBg = SharedToken.ControlItemBgActiveHover; RowExpandedBg = SharedToken.ColorFillAlter; CellPadding = SharedToken.Padding; CellPaddingMD = SharedToken.PaddingSM; CellPaddingSM = SharedToken.PaddingXS; BorderColor = SharedToken.ColorBorderSecondary; HeaderBorderRadius = SharedToken.BorderRadiusLG; FooterBg = colorFillAlterSolid; FooterColor = SharedToken.ColorTextHeading; CellFontSize = SharedToken.FontSize; CellFontSizeMD = SharedToken.FontSize; CellFontSizeSM = SharedToken.FontSize; HeaderSplitColor = SharedToken.ColorSplit; FixedHeaderSortActiveBg = colorFillSecondarySolid; HeaderFilterHoverBg = SharedToken.ColorFillContent; FilterDropdownMenuBg = SharedToken.ColorBgContainer; FilterDropdownBg = SharedToken.ColorBgElevated; ExpandIconBg = SharedToken.ColorBgContainer; SelectionColumnWidth = SharedToken.ControlHeight; ExpandIconMargin = new Thickness(0, (SharedToken.FontSize * SharedToken.FontHeight - SharedToken.LineWidth * 3) / 2 - Math.Ceiling((SharedToken.FontSizeSM * 1.4 - SharedToken.LineWidth * 3) / 2), 0, 0); HeaderIconColor = ColorUtils.FromRgbF( baseColorAction.GetAlphaF() * SharedToken.OpacityLoading, baseColorAction.GetRedF(), baseColorAction.GetGreenF(), baseColorAction.GetBlueF()); HeaderIconHoverColor = ColorUtils.FromRgbF( baseColorActionHover.GetAlphaF() * SharedToken.OpacityLoading, baseColorAction.GetRedF(), baseColorAction.GetGreenF(), baseColorAction.GetBlueF()); ExpandIconHalfInner = expandIconHalfInner; ExpandIconSize = expandIconSize; RowReorderIndicatorSize = SharedToken.SizeMD; // TODO 需要根据 SizeType 做一定的调整 ExpandIconScale = SharedToken.ControlInteractiveSize / expandIconSize; SortIconSize = SharedToken.FontHeight / 2.5; SortIndicatorLayoutMargin = new Thickness(SharedToken.UniformlyMarginXS, 0, 0, 0); FilterIndicatorPadding = new Thickness(SharedToken.UniformlyPaddingXXS, SharedToken.UniformlyPaddingXS); // 别名控件初始化 TableFontSize = CellFontSize; TableBg = SharedToken.ColorBgContainer; TableRadius = HeaderBorderRadius; TablePadding = CellPadding; TablePaddingMiddle = CellPaddingMD; TablePaddingSmall = CellPaddingSM; TableBorderColor = BorderColor; TableHeaderTextColor = HeaderColor; TableHeaderBg = HeaderBg; TableFooterTextColor = FooterColor; TableFooterBg = FooterBg; TableHeaderCellSplitColor = HeaderSplitColor; TableHeaderSortBg = HeaderSortActiveBg; TableHeaderSortHoverBg = HeaderSortHoverBg; TableBodySortBg = BodySortBg; TableFixedHeaderSortActiveBg = FixedHeaderSortActiveBg; TableHeaderFilterActiveBg = HeaderFilterHoverBg; TableFilterDropdownBg = FilterDropdownBg; TableRowHoverBg = RowHoverBg; TableSelectedRowBg = RowSelectedBg; TableSelectedRowHoverBg = RowSelectedHoverBg; TableTopLeftColumnCornerRadius = new CornerRadius(SharedToken.BorderRadiusLG.TopLeft, 0, 0, 0); TableFontSizeMiddle = CellFontSizeMD; TableFontSizeSmall = CellFontSizeSM; TableSelectionColumnWidth = SelectionColumnWidth; TableExpandIconBg = ExpandIconBg; TableExpandColumnWidth = SharedToken.ControlInteractiveSize + SharedToken.UniformlyPadding * 2; TableExpandedRowBg = RowExpandedBg; // Dropdown // TODO 暂未使用 TableFilterDropdownWidth = 120; TableFilterDropdownHeight = 264; TableFilterDropdownSearchWidth = 140; TableFilterButtonSpacing = SharedToken.UniformlyMarginXS; TableFilterButtonContainerMargin = new Thickness(0, SharedToken.UniformlyMarginXS, 0, 0); TableFilterButtonLayoutSeparatorMargin = new Thickness(0, SharedToken.UniformlyMarginXXS, 0, 0); TableFilterDropdownPadding = SharedToken.PaddingXS; LeftFrozenShadows = new BoxShadows(new BoxShadow { OffsetX = -10, OffsetY = 0, Blur = 8, Spread = 0, Color = SharedToken.ColorSplit }); RightFrozenShadows = new BoxShadows(new BoxShadow { OffsetX = 10, OffsetY = 0, Blur = 8, Spread = 0, Color = SharedToken.ColorSplit }); ColumnReorderActiveBg = colorFillContentSolid; PaginationMargin = new Thickness(0, SharedToken.UniformlyMargin); } }