mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-20 23:58:05 +08:00
5.3 KiB
5.3 KiB
Rate 自定义样式指南
Rate 的视觉表现通过 ControlTheme + Design Token 系统控制。以下介绍常见自定义方式。
1. 使用属性直接控制
最简单的方式是通过 Rate 的公共属性来控制外观:
<!-- 基本评分(默认 5 颗星,默认值 0) -->
<atom:Rate />
<!-- 半星模式,默认 3.5 分 -->
<atom:Rate IsAllowHalf="True" DefaultValue="3.5" />
<!-- 只读模式(展示已有评分) -->
<atom:Rate DefaultValue="4" IsEnabled="False" />
<!-- 禁止清除 -->
<atom:Rate DefaultValue="3" IsAllowClear="False" />
<!-- 自定义字符 — 图标 -->
<atom:Rate Character="{antdicons:AntDesignIconProvider HeartOutlined}" />
<!-- 自定义字符 — 字母 -->
<atom:Rate Character="A" />
<!-- 自定义字符 — 汉字 -->
<atom:Rate Character="秦" />
<!-- 自定义星星数量 -->
<atom:Rate Count="10" DefaultValue="7" />
不同尺寸:
<atom:Rate SizeType="Large" DefaultValue="3" />
<atom:Rate SizeType="Middle" DefaultValue="3" />
<atom:Rate SizeType="Small" DefaultValue="3" />
自定义颜色:
<!-- 自定义选中色(红色爱心) -->
<atom:Rate Character="{antdicons:AntDesignIconProvider HeartOutlined}"
StarColor="Red"
DefaultValue="3" />
<!-- 自定义背景色 -->
<atom:Rate StarBgColor="LightGray" DefaultValue="2" />
📖 完整示例参考:
controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/RateShowCase.axaml
2. 通过 Style 覆盖样式
可以在 AXAML 中使用 Style 对 Rate 进行全局或局部样式覆盖:
全局统一尺寸
<Window.Styles>
<Style Selector="atom|Rate">
<Setter Property="SizeType" Value="Large" />
</Style>
</Window.Styles>
全局统一颜色
<Window.Styles>
<!-- 所有评分使用红色 -->
<Style Selector="atom|Rate">
<Setter Property="StarColor" Value="#ff4d4f" />
</Style>
</Window.Styles>
禁用态自定义样式
<Style Selector="atom|Rate:disabled">
<Setter Property="Opacity" Value="0.5" />
</Style>
定制星星间距
通过访问内部 RateItemsControl 的 StackPanel 模板部件:
<Style Selector="atomc|RateItemsControl /template/ StackPanel#ItemsLayout">
<Setter Property="Spacing" Value="12" />
</Style>
3. 通过 ControlTheme 完全替换主题
如果需要彻底替换 Rate 的模板和样式,可以定义自定义 ControlTheme:
<ControlTheme x:Key="MyCustomRate" TargetType="atom:Rate">
<Setter Property="Template">
<ControlTemplate>
<Border Background="{TemplateBinding Background}">
<atomc:RateItemsControl Name="PART_RateItems"
Character="{TemplateBinding Character}"
StarColor="{TemplateBinding StarColor}"
StarBgColor="{TemplateBinding StarBgColor}"
IsAllowClear="{TemplateBinding IsAllowClear}"
IsAllowHalf="{TemplateBinding IsAllowHalf}"
IsMotionEnabled="{TemplateBinding IsMotionEnabled}" />
</Border>
</ControlTemplate>
</Setter>
</ControlTheme>
<!-- 使用 -->
<atom:Rate Theme="{StaticResource MyCustomRate}" />
⚠️ 注意:模板中必须保留
PART_RateItems(RateItemsControl类型),否则控件将无法正常工作。
4. 控制动画行为
<!-- 禁用悬浮缩放动画 -->
<atom:Rate IsMotionEnabled="False" DefaultValue="3" />
样式选择器速查
说明:Avalonia 样式选择器中使用
atom|Rate语法引用atomXML 命名空间下的Rate类型,其中|是命名空间分隔符。
Rate 选择器
| 选择器 | 说明 |
|---|---|
atom|Rate |
匹配所有 Rate 实例 |
atom|Rate:disabled |
匹配禁用(只读)态的 Rate |
atom|Rate[SizeType=Large] |
匹配大号 Rate |
atom|Rate[SizeType=Small] |
匹配小号 Rate |
atom|Rate[IsAllowHalf=True] |
匹配启用半星的 Rate |
内部模板部件选择器
| 选择器 | 说明 |
|---|---|
atom|Rate /template/ atomc|RateItemsControl#PART_RateItems |
星星集合容器 |
atom|Rate /template/ Border#Frame |
Rate 根框架 |
atomc|RateItemsControl /template/ StackPanel#ItemsLayout |
星星水平排列容器(可定制间距) |
RateItem 选择器(内部控件)
| 选择器 | 说明 |
|---|---|
atomc|RateItem |
匹配所有 RateItem |
atomc|RateItem:pointerover |
匹配鼠标悬浮的 RateItem |
atomc|RateItem[SizeType=Large] |
匹配大号 RateItem |
atomc|RateItem[SizeType=Middle] |
匹配中号 RateItem |
atomc|RateItem[SizeType=Small] |
匹配小号 RateItem |
atomc|RateItem[SelectedState=FullSelected] |
匹配整星选中的 RateItem |
atomc|RateItem[SelectedState=HalfSelected] |
匹配半星选中的 RateItem |
atomc|RateItem[SelectedState=None] |
匹配未选中的 RateItem |
注意事项
RateItem和RateItemsControl是内部控件(internal),使用atomc命名空间前缀(xmlns:atomc="https://atomui.net/common-controls")。- 悬浮缩放效果通过
RenderTransform实现,如需自定义缩放比例,需通过 Token 覆盖。