# Rate 使用文档
本文档介绍 AtomUI Rate 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/RateShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 Rate,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // Rate
using AtomUI.Controls; // RateValueChangedEventArgs, SizeType
```
---
## 1. 基本用法
最简单的评分,默认 5 颗星,默认值 0:
```xml
```
设置默认值:
```xml
```
> 📖 参考:Gallery 中 "Basic" 示例。
---
## 2. 半星评分
通过 `IsAllowHalf="True"` 启用半星精度,支持 0.5 步长的评分:
```xml
```
半星模式下:
- 鼠标位于星星**左半区域**时,评分为 `index + 0.5`
- 鼠标位于星星**右半区域**时,评分为 `index + 1`
- 键盘操作步长变为 0.5
> 📖 参考:Gallery 中 "Half star" 示例。
---
## 3. 提示文案
通过 `ToolTips` 属性为每颗星设置悬浮提示文案,结合 `ValueChanged` 事件显示当前评价描述:
```xml
```
```csharp
// Code-behind
public partial class RateShowCase : ReactiveUserControl
{
public RateShowCase()
{
this.WhenActivated(disposables =>
{
if (DataContext is RateViewModel viewModel)
{
viewModel.Tooltips = new List
{
"terrible", "bad", "normal", "good", "wonderful"
};
this.OneWayBind(viewModel, vm => vm.Tooltips, v => v.ToolTipRate.ToolTips)
.DisposeWith(disposables);
}
});
InitializeComponent();
}
private void HandleValueChanged(object? sender, RateValueChangedEventArgs e)
{
if (DataContext is RateViewModel viewModel)
{
var index = (int)Math.Round(e.NewValue, MidpointRounding.AwayFromZero) - 1;
if (viewModel.Tooltips?.Count > 0 && index >= 0)
{
viewModel.ActiveTooltip = viewModel.Tooltips[index];
}
else
{
viewModel.ActiveTooltip = null;
}
}
}
}
```
> 📖 参考:Gallery 中 "Show copywriting" 示例 及 `RateShowCase.axmal.cs`。
---
## 4. 只读模式
设置 `IsEnabled="False"` 禁止交互,常用于展示已有评分:
```xml
```
只读模式下:
- 鼠标不会变为手型
- 不响应点击和悬浮
- 不响应键盘操作
- 星星不会显示悬浮缩放效果
> 📖 参考:Gallery 中 "Read only" 示例。
---
## 5. 清除行为控制
`IsAllowClear` 控制是否允许再次点击相同值清除评分:
```xml
IsAllowClear: true
IsAllowClear: false
```
清除行为说明:
- `IsAllowClear = true`:再次点击当前评分的星星,评分清零
- `IsAllowClear = false`:再次点击不会改变评分,最低保持当前值
> 📖 参考:Gallery 中 "Clear star" 示例。
---
## 6. 自定义字符
通过 `Character` 属性替换默认星星,支持图标、字母、汉字等三种类型:
### 图标字符
```xml
```
### 字母字符
```xml
```
### 汉字字符
```xml
```
> 📖 参考:Gallery 中 "Other Character" 示例。
---
## 7. 尺寸控制
通过 `SizeType` 属性控制星星大小,支持三种尺寸:
```xml
```
---
## 8. 键盘操作
Rate 默认支持键盘操作(`IsKeyboardEnabled = true`)。先点击一颗星获取焦点,然后使用方向键:
- **← 左方向键**:减少评分
- **→ 右方向键**:增加评分
- 半星模式下步长为 0.5,整星模式下步长为 1
禁用键盘操作:
```xml
```
---
## 9. 监听事件
### 监听评分值变化
```csharp
myRate.ValueChanged += (sender, args) =>
{
Console.WriteLine($"评分从 {args.OldValue} 变为 {args.NewValue}");
};
```
### 监听悬浮值变化
```csharp
myRate.HoverValueChanged += (sender, args) =>
{
Console.WriteLine($"悬浮预览: {args.NewValue}");
};
```
---
## 10. 控制动画行为
```xml
```
---
## 常见组合模式
### 表单中的评分
```xml
```
### 带数值展示的评分
```xml
```
### 带文案描述的评分
```xml
```
```csharp
private readonly string[] _descriptions = { "terrible", "bad", "normal", "good", "wonderful" };
private void HandleDescValueChanged(object? sender, RateValueChangedEventArgs e)
{
var index = (int)Math.Round(e.NewValue, MidpointRounding.AwayFromZero) - 1;
DescText.Text = index >= 0 && index < _descriptions.Length ? _descriptions[index] : "";
}
```
### 自定义颜色的爱心评分
```xml
```
### MVVM 数据绑定
```xml
```
```csharp
// ViewModel
[Reactive]
public double Rating { get; set; } = 3;
[Reactive]
public bool AllowHalf { get; set; } = true;
[Reactive]
public int MaxStars { get; set; } = 5;
```