diff --git a/controlgallery/AtomUIGallery/ShowCases/ProgressBarShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/ProgressBarShowCase.axaml
index 7620206a2..0623908a4 100644
--- a/controlgallery/AtomUIGallery/ShowCases/ProgressBarShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/ProgressBarShowCase.axaml
@@ -25,7 +25,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
@@ -65,7 +65,7 @@
Title="Dynamic"
Description="A dynamic progress bar is better.">
-
+
Sub
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/BadgeShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/BadgeShowCase.axaml
index 9e814b2db..56f387b25 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/BadgeShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/BadgeShowCase.axaml
@@ -16,7 +16,7 @@
Background="rgb(191,191,191)"
CornerRadius="8" />
-
+
+ IsZeroVisible="True" />
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/DataGridShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/DataGridShowCase.axaml
index e75f8d453..7dfe2254b 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/DataGridShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/DataGridShowCase.axaml
@@ -140,7 +140,7 @@
Binding="{Binding Address}"
CanUserSort="True"
- FilterMultiple="True"
+ IsMultipleFilterEnabled="True"
SupportedSortDirections="Ascending">
@@ -234,7 +234,7 @@
Binding="{Binding Address}"
CanUserSort="True"
- FilterMultiple="True"
+ IsMultipleFilterEnabled="True"
SupportedSortDirections="Ascending">
@@ -286,7 +286,7 @@
+ IsMultipleFilterEnabled="True">
@@ -304,7 +304,7 @@
Binding="{Binding Address}"
CanUserSort="True"
- FilterMultiple="True">
+ IsMultipleFilterEnabled="True">
@@ -358,7 +358,7 @@
Description="Add border, title and footer for table." IsOccupyEntireRow="True">
Header
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/EmptyShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/EmptyShowCase.axaml
index dec084fac..4de73fbf0 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/EmptyShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/EmptyShowCase.axaml
@@ -38,7 +38,7 @@
-
+
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/InfoFlyoutShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/InfoFlyoutShowCase.axaml
index ed583e42c..59b4585e4 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/InfoFlyoutShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/InfoFlyoutShowCase.axaml
@@ -222,7 +222,7 @@
@@ -235,7 +235,7 @@
@@ -248,7 +248,7 @@
@@ -261,7 +261,7 @@
@@ -274,7 +274,7 @@
@@ -287,7 +287,7 @@
@@ -300,7 +300,7 @@
@@ -313,7 +313,7 @@
@@ -326,7 +326,7 @@
@@ -339,7 +339,7 @@
@@ -352,7 +352,7 @@
@@ -365,7 +365,7 @@
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TimelineShowCase.axaml.cs b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TimelineShowCase.axaml.cs
index 8f3976ce9..323a34230 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TimelineShowCase.axaml.cs
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TimelineShowCase.axaml.cs
@@ -42,15 +42,15 @@ public partial class TimelineShowCase : ReactiveUserControl
{
if (radioButton == ModeLeft && ModeLeft.IsChecked == true)
{
- LabelTimeline.Mode = TimeLineMode.Left;
+ LabelTimeline.Mode = TimelineMode.Left;
}
else if (radioButton == ModeRight && ModeRight.IsChecked == true)
{
- LabelTimeline.Mode = TimeLineMode.Right;
+ LabelTimeline.Mode = TimelineMode.Right;
}
else if (radioButton == ModeAlternate && ModeAlternate.IsChecked == true)
{
- LabelTimeline.Mode = TimeLineMode.Alternate;
+ LabelTimeline.Mode = TimelineMode.Alternate;
}
}
}
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml
index 33a73f328..4d04d4bb8 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml
@@ -131,80 +131,80 @@
prompt text
LeftEdgeAlignedTop
prompt text
Left
prompt text
LeftEdgeAlignedBottom
prompt text
TopEdgeAlignedLeft
prompt text
Top
prompt text
TopEdgeAlignedRight
prompt text
RightEdgeAlignedTop
prompt text
Right
prompt text
RightEdgeAlignedBottom
prompt text
BottomEdgeAlignedLeft
prompt text
Bottom
prompt text
BottomEdgeAlignedRight
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/ColorPickerShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/ColorPickerShowCase.axaml
index 9733f4698..66d158e69 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/ColorPickerShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/ColorPickerShowCase.axaml
@@ -18,17 +18,17 @@
-
+
-
+
-
+
@@ -37,7 +37,7 @@
Title="Line Gradient"
Description="Set the color to a single or a gradient color via mode.">
-
+
@@ -52,8 +52,8 @@
Title="Rendering Trigger Text"
Description="Renders the default text of the trigger, effective when showText is true. When customizing text, you can use showText as a function to return custom text.">
-
-
+
+
@@ -61,7 +61,7 @@
Title="Disabled"
Description="Set to disabled state.">
-
+
-
-
+
+
@@ -110,9 +110,9 @@
Title="Color Format"
Description="Encoding formats, support HEX, HSB, RGB.">
-
-
-
+
+
+
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/FormShowCase.axaml.cs b/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/FormShowCase.axaml.cs
index 1c9aa09a3..8eba832ec 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/FormShowCase.axaml.cs
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/FormShowCase.axaml.cs
@@ -270,7 +270,7 @@ public class CustomizeGenderFormItem : FormItem
public class PriceValidator : AbstractFormValidator
{
- protected override async Task NotifyValidateAsync(string fieldName, object? value, CancellationToken cancellationToken)
+ protected override async Task ValidateCoreAsync(string fieldName, object? value, CancellationToken cancellationToken)
{
var price = value as PriceInfo;
return await Task.FromResult(price != null && price.Value > 0);
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/SliderShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/SliderShowCase.axaml
index 3e4ad16e2..2e294615e 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/SliderShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/SliderShowCase.axaml
@@ -121,7 +121,7 @@
Maximum="100"
Minimum="0"
TickFrequency="1"
- Included="False"
+ IsIncluded="False"
Value="20" />
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/PopupConfirmShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/PopupConfirmShowCase.axaml
index a3ab19fe9..f464cf09e 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/PopupConfirmShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/PopupConfirmShowCase.axaml
@@ -15,7 +15,7 @@
OkText="Ok"
CancelText="Cancel"
Placement="Top"
- IsShowArrow="True">
+ IsArrowVisible="True">
Delete
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/SpinShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/SpinShowCase.axaml
index 840c58afd..b4159359c 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/SpinShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/Feedback/SpinShowCase.axaml
@@ -45,23 +45,23 @@
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/Layout/GridShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/Layout/GridShowCase.axaml
index ad671e15e..f53ad470b 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/Layout/GridShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/Layout/GridShowCase.axaml
@@ -144,7 +144,7 @@
Vertical
-
+
col-6
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/Layout/SpaceShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/Layout/SpaceShowCase.axaml
index a0f6d1ac2..eda07f57d 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/Layout/SpaceShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/Layout/SpaceShowCase.axaml
@@ -34,7 +34,7 @@
OkText="Ok"
CancelText="Cancel"
Placement="Top"
- IsShowArrow="True">
+ IsArrowVisible="True">
Confirm
diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/Navigation/DropdownButtonShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/Navigation/DropdownButtonShowCase.axaml
index 1ac0e4350..b14b8d7fe 100644
--- a/controlgallery/AtomUIGallery/ShowCases/Views/Navigation/DropdownButtonShowCase.axaml
+++ b/controlgallery/AtomUIGallery/ShowCases/Views/Navigation/DropdownButtonShowCase.axaml
@@ -106,7 +106,7 @@
-
BottomLeft
@@ -121,7 +121,7 @@
-
Bottom
@@ -136,7 +136,7 @@
-
BottomRight
@@ -151,7 +151,7 @@
-
TopLeft
@@ -166,7 +166,7 @@
-
Top
@@ -181,7 +181,7 @@
-
TopRight
diff --git a/docs/ColorPickerPopupRefactoringPlan.md b/docs/ColorPickerPopupRefactoringPlan.md
deleted file mode 100644
index 61bf60005..000000000
--- a/docs/ColorPickerPopupRefactoringPlan.md
+++ /dev/null
@@ -1,242 +0,0 @@
-# ColorPicker Popup 重构方案:TriggerType 与箭头管理
-
-## 背景
-
-ColorPicker 已完成从 Flyout 到直接 Popup 的基本迁移(删除了 `AbstractColorPickerFlyout`、`ColorPickerFlyout`、`GradientColorPickerFlyout`),但 TriggerType 的实现和箭头管理做得不好:
-
-- TriggerType 当前通过简单的 `OnClick`/`OnPointerEntered`/`OnPointerExited` 重写实现,缺少延迟定时器、全局指针追踪、焦点范围检测
-- 箭头缺少 `IsShowArrowEffective`、`ArrowPosition`、翻转追踪等关键逻辑
-- `IsLightDismissEnabled` 硬编码为 `True`,应根据 TriggerType 动态设置
-
-## 参考实现
-
-- `FlyoutStateHelper.cs` — TriggerType 的完整实现模式(定时器 + InputManager + 范围检测)
-- `Flyout.cs` — 箭头管理模式(IsShowArrowEffective / ArrowPosition / flip tracking)
-- `PopupUtils.cs` — 箭头计算工具方法
-
-## 重构内容
-
-### 1. TriggerType 重写
-
-**当前问题**:
-- Hover 模式没有 `MouseEnterDelay`/`MouseLeaveDelay` 定时器
-- Hover 模式没有通过 `InputManager.Process` 订阅全局指针移动来检测指针是否在 Popup 内
-- Focus 模式没有根级 PointerPressed 处理(点击外部关闭)
-- Focus 模式没有焦点范围检测(`IsFocusWithinFlyoutScope`)
-- Click 模式没有正确设置 `IsLightDismissEnabled`
-
-**方案**:在 `AbstractColorPicker` 中内联 `FlyoutStateHelper` 的核心逻辑:
-
-```csharp
-// 新增属性
-public static readonly StyledProperty MouseEnterDelayProperty =
- AvaloniaProperty.Register(nameof(MouseEnterDelay), 200);
-
-public static readonly StyledProperty MouseLeaveDelayProperty =
- AvaloniaProperty.Register(nameof(MouseLeaveDelay), 200);
-
-// 新增字段
-private DispatcherTimer? _mouseEnterDelayTimer;
-private DispatcherTimer? _mouseLeaveDelayTimer;
-private IDisposable? _popupPointerSubscription;
-private TopLevel? _registeredTopLevel;
-private bool _isPickerShowing;
-```
-
-**Hover 模式实现要点**:
-1. 监听 `IsPointerOverProperty` 变化(通过 `GetObservable`)
-2. 指针进入 → 启动 `_mouseEnterDelayTimer`,到期后打开 Popup
-3. 指针离开 anchor → 检查 Popup 内是否有指针,没有则启动 `_mouseLeaveDelayTimer`
-4. Popup 打开后 → 通过 `InputManager.Process` 订阅全局指针移动事件
-5. 全局指针移动 → hit test 判断是否在 flyout scope 内(anchor 或 popup child)
-6. 离开 scope → 启动关闭定时器;回到 scope → 取消关闭定时器
-
-**Click 模式实现要点**:
-1. 设置 `IsLightDismissEnabled = true`(仅 Click 模式需要)
-2. 通过 `AddHandler(PointerPressedEvent, ..., handledEventsToo: true)` 处理点击
-3. 点击时 toggle `IsPickerOpen`
-
-**Focus 模式实现要点**:
-1. 监听 `GotFocus` → 打开 Popup
-2. 监听 `LostFocus` → `Dispatcher.Post` 延迟检查焦点是否仍在 flyout scope 内
-3. Popup 打开后 → 注册根级 `PointerPressedEvent`(Tunnel 路由)
-4. 根级点击 → 判断点击目标是否在 flyout scope 内,不在则关闭
-5. Flyout scope = anchor 及其子元素 + popup child 及其逻辑子元素
-
-**Scope 检测方法**:
-```csharp
-private bool IsVisualInPickerScope(Visual visual)
-{
- // 在 anchor 内
- if (visual == this || this.IsVisualAncestorOf(visual))
- return true;
- // 在 popup 内
- if (_popup is { Child: Visual popupChild } &&
- (visual == popupChild || popupChild.IsLogicalAncestorOf(visual)))
- return true;
- return false;
-}
-```
-
-**生命周期管理**:
-- `OnAttachedToVisualTree` → `SetupTriggerHandler()`
-- `OnDetachedFromVisualTree` → 停止所有定时器、取消订阅、清理
-- `TriggerTypeProperty` 变化 → 重新 `SetupTriggerHandler()`
-
-**删除当前的**:
-- `OnClick()` 重写中的 TriggerType 逻辑
-- `OnPointerEntered()` / `OnPointerExited()` 重写
-- `_isPointerInPopup` 字段
-- `HandlePopupPointerEntered` / `HandlePopupPointerExited`
-- `ClosePickerWithDelayIfNeeded()`
-- `HandleGotFocus` / `HandleLostFocus` 中的简单实现
-
-### 2. 箭头管理重写
-
-**当前问题**:
-- 没有 `IsShowArrowEffective` 计算(某些 Placement 不支持箭头)
-- 没有 `ArrowPosition` 属性(箭头方向)
-- 没有翻转追踪(Popup 被翻转时箭头方向需要跟着翻转)
-- Theme 模板中 `ArrowDecoratedBox` 没有绑定 `ArrowPosition` 和 `IsShowArrow`
-
-**方案**:参照 `Flyout.cs` 的模式:
-
-```csharp
-// 新增内部属性
-internal static readonly DirectProperty IsShowArrowEffectiveProperty = ...;
-internal static readonly DirectProperty IsPopupHorizontalFlippedProperty = ...;
-internal static readonly DirectProperty IsPopupVerticalFlippedProperty = ...;
-internal static readonly StyledProperty ArrowPositionProperty =
- ArrowDecoratedBox.ArrowPositionProperty.AddOwner();
-```
-
-**箭头计算逻辑**:
-```csharp
-private void ConfigureShowArrowEffective()
-{
- if (!IsShowArrow)
- {
- IsShowArrowEffective = false;
- }
- else
- {
- var placement = Placement;
- IsShowArrowEffective = PopupUtils.CanEnabledArrow(placement, PlacementAnchor, PlacementGravity);
- }
-}
-
-private void ConfigureArrowPosition()
-{
- var placement = Placement;
- var arrowPosition = PopupUtils.CalculateArrowPosition(placement, PlacementAnchor, PlacementGravity);
- if (arrowPosition.HasValue)
- {
- arrowPosition = ArrowPositionUtils.FlipArrowPosition(
- arrowPosition.Value, IsPopupHorizontalFlipped, IsPopupVerticalFlipped);
- SetCurrentValue(ArrowPositionProperty, arrowPosition);
- }
-}
-```
-
-**触发时机**:
-- `IsShowArrowProperty` / `PlacementProperty` / `PlacementGravityProperty` 变化 → `ConfigureShowArrowEffective()`
-- `PlacementProperty` / `IsPopupHorizontalFlippedProperty` / `IsPopupVerticalFlippedProperty` 变化 → `ConfigureArrowPosition()`
-
-**Popup 翻转绑定**(在 `OnApplyTemplate` 中):
-```csharp
-this[!IsPopupHorizontalFlippedProperty] = _popup[!PopupControl.IsHorizontalFlippedProperty];
-this[!IsPopupVerticalFlippedProperty] = _popup[!PopupControl.IsVerticalFlippedProperty];
-```
-
-### 3. Theme 模板修复
-
-**ColorPickerTheme.axaml / GradientColorPickerTheme.axaml**:
-
-```xml
-
-
-
-```
-
-**关键变化**:
-- `IsLightDismissEnabled` → TemplateBinding(动态,由 TriggerType 决定)
-- `ShouldUseOverlayLayer` → TemplateBinding(新增公共属性)
-- 新增 `PlacementGravity`、`IsPointAtCenter` 绑定
-- `ArrowDecoratedBox` 新增 `IsShowArrow` 和 `ArrowPosition` 绑定
-
-### 4. 新增公共属性
-
-```csharp
-public static readonly StyledProperty ShouldUseOverlayPopupProperty =
- AvaloniaProperty.Register(nameof(ShouldUseOverlayPopup), true);
-
-public static readonly StyledProperty IsLightDismissEnabledProperty =
- AvaloniaProperty.Register(nameof(IsLightDismissEnabled), true);
-
-public static readonly StyledProperty PlacementAnchorProperty =
- Popup.PlacementAnchorProperty.AddOwner();
-```
-
-`IsLightDismissEnabled` 在 `SetupTriggerHandler()` 中根据 TriggerType 自动设置:
-```csharp
-SetCurrentValue(IsLightDismissEnabledProperty, TriggerType == FlyoutTriggerType.Click);
-```
-
-### 5. 命名清理
-
-| 旧名称 | 新名称 | 说明 |
-|--------|--------|------|
-| `NotifyFlyoutOpened()` | `NotifyPickerOpened()` | 子类重写点 |
-| `NotifyFlyoutClosed()` | `NotifyPickerClosed()` | 子类重写点 |
-| `ClosePickerFlyout()` | `ClosePicker()` | 公共 API |
-| `UpdatePseudoClasses` 中 `:flyout-open` | 保持不变 | 兼容现有样式 |
-
-### 6. Popup Overlay 配置
-
-Hover 模式下需要特殊配置以避免 Popup overlay 拦截指针事件:
-```csharp
-if (_popup != null)
-{
- _popup.OverlayInputPassThroughElement = this;
- _popup.OverlayDismissEventPassThrough = true;
-}
-```
-
-这确保:
-- 指针事件能穿透 overlay 到达 anchor(不会因为 overlay 导致 PointerExited)
-- overlay 的 dismiss 事件不会直接关闭 Popup(由我们的逻辑控制关闭时机)
-
-## 实现步骤
-
-1. 在 `AbstractColorPicker` 中添加新属性(MouseEnterDelay、MouseLeaveDelay、箭头相关、ShouldUseOverlayPopup、IsLightDismissEnabled)
-2. 删除当前的 TriggerType 简单实现(OnClick/OnPointerEntered/OnPointerExited 等)
-3. 实现 `SetupTriggerHandler()` + 三种模式的完整逻辑
-4. 实现箭头管理(ConfigureShowArrowEffective / ConfigureArrowPosition)
-5. 更新 `OnApplyTemplate` 中的 Popup 绑定(翻转追踪、overlay 配置)
-6. 更新两个 Theme AXAML 模板
-7. 重命名 `NotifyFlyoutOpened`/`NotifyFlyoutClosed` → `NotifyPickerOpened`/`NotifyPickerClosed`
-8. 更新 `ColorPicker.cs` 和 `GradientColorPicker.cs` 中的重写方法名
-9. 构建验证
-
-## 验证清单
-
-- [ ] Click 模式:点击打开/关闭,点击外部关闭(light dismiss)
-- [ ] Hover 模式:延迟打开,指针移到 Popup 内不关闭,离开后延迟关闭
-- [ ] Focus 模式:获得焦点打开,失去焦点关闭,点击外部关闭
-- [ ] 箭头:正确显示/隐藏,方向正确,翻转后方向跟随
-- [ ] IsPointAtCenter:箭头指向 anchor 中心
-- [ ] 窗口失活时关闭
-- [ ] Disabled 状态不响应触发
-- [ ] GradientColorPicker 同样正常工作
diff --git a/docs/DialogWindowOverlayArchitecturePlan.md b/docs/DialogWindowOverlayArchitecturePlan.md
deleted file mode 100644
index 1d54be6e1..000000000
--- a/docs/DialogWindowOverlayArchitecturePlan.md
+++ /dev/null
@@ -1,820 +0,0 @@
-# Dialog Window/Overlay implementation plan for release/6.0
-
-## 背景与目标
-
-`release/5.0` 的 `Dialog` 是一套完整的弹窗系统:外部通过 `Dialog`、`DialogOptions`、`ShowDialog*` 静态 API、`IDialog`、`IDialogHostProvider` 等接口使用;内部根据 `DialogHostType` 分为 `Window Dialog` 与 `Overlay Dialog` 两种承载方式。
-
-`release/6.0` 已引入新的 `Window` 架构与新的 `Popup`/Overlay 架构:
-
-- `Window` 模板内使用 `VisualLayerManager`、`FullscreenPopoverLayer`、新的标题栏和新的 resizer。
-- `Popup` 移除了旧的 `PopupBuddyLayer`/`OverlayPopupContent`,改为 Avalonia 12 的 PopupHost/OverlayPopupHost 路线,并通过 `PopupMotionActor`、`ShadowsAwareContainer`、`ShouldUseOverlayLayer` 统一动画与阴影。
-
-本计划的目标是基于 `release/6.0` 的新架构重新完成:
-
-1. `Window Dialog`
-2. `Overlay Dialog`
-
-同时保持 `release/5.0` 的外部接口、交互语义和 UI 效果不变。
-
-重要原则:以 `release/5.0` 的对外 API、行为语义和 UI 效果为基线,在 `release/6.0` 新 `Window` 和新 `Popup` 架构上重新实现 Dialog。
-
-## 必须保持不变的对外行为
-
-### Public API
-
-需要保持或恢复以下 API:
-
-- `Dialog`
-- `DialogOptions`
-- `DialogHostType`
-- `DialogPlacement` 中的 `DialogHorizontalAnchor`、`DialogVerticalAnchor`
-- `DialogStandardButton` / `DialogStandardButtons`
-- `DialogButton`
-- `DialogButtonRole`
-- `IDialog`
-- `IDialogActionResult`
-- `IDialogAwareDataContext`
-- `IDialogHost`
-- `IDialogHostProvider`
-- `Dialog.ShowDialog*`
-- `Dialog.ShowDialogModal*`
-- `Dialog.ShowDialogAsync*`
-- `Dialog.ShowDialogModalAsync*`
-
-为了“接口不变”,需要提供这些静态 API。内部实现不再依赖 `GlobalDialogManager`:Window 类型基于新 `Window`,Overlay 类型基于新 `Popup` 自己的 OverlayLayer。
-
-### 行为语义
-
-以下行为需要与 `release/5.0` 保持一致:
-
-- `DialogHostType.Window` 使用独立窗口承载。
-- `DialogHostType.Overlay` 在当前 `TopLevel` 的 overlay 层内承载。
-- `IsModal=true` 时,异步打开应等待 Dialog 关闭后完成。
-- `IsModal=false` 时,异步打开应在 Host 显示后完成,关闭结果通过回调或事件获取。
-- `Open()` 仍通过局部 Dispatcher frame 实现同步等待。
-- `Accept()` 设置 `Result = DialogCode.Accepted` 并触发关闭。
-- `Reject()` 设置 `Result = DialogCode.Rejected` 并触发关闭。
-- `Done(object? result)` 设置结果并关闭。
-- `Closing` 可取消关闭。
-- `IsConfirmLoading=true` 时禁止确认关闭,并同步到确认类按钮 loading 状态。
-- `IDialogAwareDataContext.NotifyAttachedToDialog/NotifyDetachedFromDialog/NotifyClosed` 生命周期保持。
-- `CustomButtons` 打开前后动态增删保持同步。
-- `ButtonsConfigure` 在按钮同步后仍可配置按钮。
-- light dismiss、遮罩事件穿透、父窗口关闭时关闭 Dialog 的语义保持。
-
-### UI 效果
-
-需要保持 Ant Design 5.0 Dialog 视觉效果:
-
-- header/content/footer padding、间距、字体、背景和阴影继续由 `DialogToken` 控制。
-- Overlay Dialog 保持圆角、阴影、modal mask、标题栏、关闭按钮、最大化按钮、resize handle、拖拽移动。
-- Window Dialog 保持与 AtomUI Window 一致的新标题栏、系统平台适配和窗口阴影,同时保留 Dialog footer/button box。
-- `DialogButtonBox` 的按钮布局、本地化文本、默认按钮、Esc 按钮、确认按钮 loading 不变。
-
-## 架构取舍
-
-实现时需要遵循以下取舍:
-
-- 可从 5.0 拿回 API、按钮系统、Token、Localization 和视觉模板结构。
-- 不直接拿回 5.0 的旧 `GlobalDialogManager`、旧 `DialogLayer`、旧 `ManagedDialogPositioner` 作为最终架构。
-- 以 6.0 的 `Window` 和新 `Popup`/OverlayPopupHost 作为底座。
-- Window Dialog 不复制或修改 Window 的复杂 ControlTheme,直接使用新 `Window` 的原生模板能力,通过设置 Window `Content` / `ContentTemplate` 承载 Dialog 自己的内容包装控件。
-
-因此实现重点是将 5.0 的 API 和视觉行为重新映射到 6.0 的 Window/Popup 架构。
-
-## 总体架构
-
-### 组件关系
-
-```text
-Dialog
-├── public API / lifecycle / events / result
-├── static ShowDialog* APIs
-├── DialogOpenState
-├── Relay bindings to host
-│
-├── Window Dialog
-│ └── DialogHost : AtomUI.Desktop.Controls.Window
-│ ├── uses release/6.0 Window chrome/titlebar/resizer
-│ ├── owns DialogButtonBox footer
-│ └── relays close/minimize/maximize/footer/loading/buttons
-│
-└── Overlay Dialog
- └── OverlayDialogHost : ContentControl
- ├── hosted as Popup content
- ├── Popup.ShouldUseOverlayLayer = true
- ├── optional OverlayDialogMask
- ├── OverlayDialogHeader
- ├── DialogButtonBox footer
- ├── OverlayDialogResizer
- └── drag/maximize/restore/z-index/motion
-```
-
-### Host 创建策略
-
-`Dialog.OpenAsync` 根据 `DialogHostType` 分发:
-
-```text
-DialogHostType.Window
- TopLevel parent = TopLevel.GetTopLevel(PlacementTarget)
- DialogHost host = CreateDialogHost(parent, this)
- host.SetChild(ContentControl)
- relay Dialog properties
- host.Show() or ShowDialog-like modal loop
-
-DialogHostType.Overlay
- Popup popup = CreateOverlayPopup(PlacementTarget or topLevel)
- popup.ShouldUseOverlayLayer = true
- OverlayDialogHost host = CreateOverlayDialogHost(popup, this)
- host is assigned as popup child/content
- relay Dialog properties
- popup.IsOpen = true
-```
-
-`Dialog` 自身继续不参与 measure/arrange,仍作为逻辑控制器存在。
-
-## Window Dialog 设计
-
-### 承载类
-
-保留:
-
-```csharp
-internal class DialogHost : Window, IDialogHost, IStyleHost, IMotionAwareControl
-```
-
-但需要明确它是基于 `release/6.0` 新 `Window` 的 Dialog 特化,而不是 5.0 旧 Window 模板副本。
-
-### Window 属性同步
-
-`Dialog` 打开 Window Host 时需要同步:
-
-- `Title`
-- `TitleIcon` 到 Window 的 `Icon`/`Logo` 或 DialogHost 自定义 title content
-- `Content`
-- `ContentTemplate`
-- `Width`
-- `Height`
-- `MinWidth`
-- `MinHeight`
-- `MaxWidth`
-- `MaxHeight`
-- `Topmost`
-- `IsResizable`
-- `IsClosable`
-- `IsMaximizable`
-- `IsMinimizable`
-- `IsModal`
-- `IsMotionEnabled`
-- `IsLoading`
-- `IsConfirmLoading`
-- `StandardButtons`
-- `DefaultStandardButton`
-- `EscapeStandardButton`
-- `IsFooterVisible`
-
-`IsModal=true` 时:
-
-- `EffectiveMinimizable=false`
-- Window host 不显示 minimize caption button
-- 关闭通过 Dialog `Closing` 事件统一拦截
-
-### Window Content 包装策略
-
-Window 的 ControlTheme 处理跨平台 CSD、标题栏、阴影、resizer、`VisualLayerManager`、`FullscreenPopoverLayer` 等复杂逻辑。Window Dialog 不应复制、覆盖或修改 Window 的 ControlTheme。
-
-首选方案:`DialogHost` 继续继承 release/6.0 的 `Window`,并直接使用 Window 原有 `ControlTheme`。Dialog 专属 UI 通过设置 Window 的 `Content` 和 `ContentTemplate` 实现。
-
-建议新增内部内容包装控件,例如:
-
-```text
-DialogWindowContent
-├── Skeleton loading wrapper
-├── user content presenter
-└── DialogButtonBox footer
-```
-
-`DialogHost.SetChild(Control? control)` 不应直接把用户内容设置给 Window `Content`,而应:
-
-1. 保存用户内容和 `ContentTemplate`。
-2. 创建/更新 `DialogWindowContent`。
-3. 将 `DialogWindowContent` 设置为 Window `Content`。
-4. 由 `DialogWindowContent` 内部承载用户内容、loading skeleton、footer 和 button box。
-
-包装控件可以是内部 `TemplatedControl` 或轻量 `ContentControl`:
-
-- 若需要 token style 和 template selector,使用 `TemplatedControl`。
-- 若实现足够简单,可使用 `ContentControl` + 专用 `ControlTheme`。
-
-包装控件需要暴露或接收:
-
-- `DialogContent`
-- `DialogContentTemplate`
-- `IsLoading`
-- `IsConfirmLoading`
-- `IsFooterVisible`
-- `IsEffectiveFooterVisible`
-- `StandardButtons`
-- `DefaultStandardButton`
-- `EscapeStandardButton`
-- `CustomButtons`
-- `IsMotionEnabled`
-
-它的模板只负责 Dialog 内容区:
-
-```xml
-
-
-
-
-
-
-
-
-```
-
-这样 Window Dialog 可以完整复用新 Window 的 ControlTheme,并把 Dialog 的 header/footer/content 逻辑限制在 Window content 区域内,避免后续 Window 模板变化导致 DialogHost 模板同步成本。
-
-`DialogHostTheme.axaml` 应尽量保持很薄:
-
-- 只 `BasedOn` 新 `WindowTheme`。
-- 设置 DialogHost 默认属性,例如 `SizeToContent`、`Padding`、caption button 可见性。
-- 不定义完整 `ControlTemplate`。
-- 不选择 Window 内部复杂 template part,除非该 part 是稳定公开常量。
-
-### Dialog 定位抽象
-
-不要使用 `release/5.0` 的 `ManagedDialogPositioner`。它为旧 Popup/DialogLayer 场景处理了大量 anchor、gravity、screen constraint、flip 等复杂逻辑,但 Dialog 当前只需要 Ant Design Dialog 的启动位置和 offset 语义。Window 类型已经可以直接设置窗口位置;Popup 类型固定使用 Dialog 自己的 `CustomPopupPlacementCallback`,不考虑通用 `Placement`,因为 Dialog 的 Overlay 场景里 placement 没有实际意义。
-
-建议抽象一个轻量定位接口,统一 Window Dialog 和 Overlay Dialog 的定位输入,但分别适配不同宿主:
-
-```csharp
-internal interface IDialogPlacementController
-{
- void Attach(Dialog dialog, IDialogHost host, TopLevel topLevel, Control placementTarget);
- void Detach();
- void UpdatePlacement();
- void NotifyHostMeasured(Size hostSize, Rect ownerBounds);
-}
-```
-
-或使用更小的计算型接口:
-
-```csharp
-internal interface IDialogPlacementCalculator
-{
- Point Calculate(Dialog dialog, Size hostSize, Size ownerSize);
-}
-```
-
-推荐组合:
-
-- `DialogPlacementCalculator`:只负责根据 `HorizontalStartupLocation`、`VerticalStartupLocation`、`HorizontalOffset`、`VerticalOffset` 计算 logical offset。
-- `WindowDialogPlacementController`:把 logical offset 转成 screen/device position,并设置 `DialogHost.Position`。
-- `PopupDialogPlacementController`:维护 Dialog offset,并安装 Dialog 专用 `CustomPopupPlacementCallback`;callback 根据当前 offset 返回固定 top-left placement。
-
-这样定位策略只写一份,宿主适配逻辑分开,避免把 Window 和 Popup 坐标系混在一起。
-
-### Window Dialog 定位
-
-Window Dialog 直接设置 Window 位置,不使用 `ManagedDialogPositioner`:
-
-- startup location 只负责初始位置。
-- `HorizontalStartupLocation` / `VerticalStartupLocation` 计算 `OffsetX` / `OffsetY`。
-- Window host 测量完成后调用 `NotifyDialogHostMeasured(Size, Rect)`。
-- `Rect` 来源:
- - 优先使用 owner 所在 screen working area。
- - 无 owner screen 时使用 primary screen working area。
-- 计算完成后设置 `DialogHost.Position`。
-
-`WindowDialogPlacementController.UpdatePlacement()`:
-
-```text
-Window host:
- logical point = owner screen top-left + OffsetX/Y
- device point = logical point * DesktopScaling
- host.Position = device point
-```
-
-Window 类型不需要 placement callback,也不需要复杂避让逻辑。后续如果要支持 owner window 移动时跟随,只在 `WindowDialogPlacementController` 中订阅 owner position/size 变化即可。
-
-### Window Dialog 关闭
-
-`DialogHost.OnClosing` 必须拦截用户关闭:
-
-- 非程序关闭或 caption close button 关闭时取消 `WindowClosingEventArgs`。
-- 转发到 `Dialog.NotifyDialogHostCloseRequest()`。
-- 由 `Dialog.NotifyClose()` 统一触发 `Closing`、`Accepted`、`Rejected`、`Finished`、`Closed`。
-
-程序关闭时由 `DialogOpenState.Dispose()` 调用 `host.Close(callback)`。
-
-## Overlay Dialog 设计
-
-### Popup OverlayLayer 承载策略
-
-Overlay Dialog 应直接使用 `Popup` 自己的 OverlayLayer,不引入 `ScopeAwareOverlayLayer`。
-
-```text
-Dialog
-└── Popup
- ├── ShouldUseOverlayLayer = true
- ├── PlacementTarget = Dialog.PlacementTarget or TopLevel root/content
- ├── CustomPopupPlacementCallback = Dialog-specific callback
- └── Child/Content = OverlayDialogHost
-```
-
-这样 Overlay Dialog 的层级、PopupHost、OverlayPopupHost、motion/shadow 基础设施都由新 Popup 架构负责。
-
-`Dialog` 不应直接查找或注入 overlay layer。它只创建和配置 `Popup`,由 `Popup` 内部决定使用 OverlayPopupHost 还是 PopupRoot。
-
-### Overlay Host 结构
-
-承载类:
-
-```csharp
-internal class OverlayDialogHost : ContentControl, IDialogHost, IMotionAwareControl
-```
-
-内部职责:
-
-- 作为 `Popup` 的内容控件存在。
-- 通过持有 owner `Popup` 或由 `DialogOpenState` 管理 popup open/close。
-- 管理 `OverlayDialogMask`
-- 管理 `OverlayDialogHeader`
-- 管理 `DialogButtonBox`
-- 管理 `OverlayDialogResizer`
-- 管理拖拽、最大化、还原
-- 管理 z-index
-- 管理打开/关闭动画
-- 管理 footer 自动显隐
-
-### Overlay mask
-
-`IsModal=true`:
-
-- 在 `OverlayDialogHost` 内显示 mask。
-- Popup 内容容器应按 owner `TopLevel.ClientSize` 或 placement target root bounds 拉满,使 mask 覆盖当前 Popup OverlayLayer 可视区域。
-- mask 拦截 pointer wheel 和 pointer press。
-- `IsLightDismissEnabled=true` 时点击 mask 触发 `Dialog.NotifyClose()`。
-
-`IsModal=false`:
-
-- 不显示阻塞 mask。
-- host 自身保留阴影。
-- 点击外部不关闭,除非显式配置 light dismiss。
-
-### Overlay 事件穿透
-
-保持 5.0 的语义:
-
-- `OverlayDismissEventPassThrough=true` 时,mask 点击关闭后将 pointer event 转发给 `OverlayInputPassThroughElement` 或原始命中元素。
-- 如果 release/6.0/Avalonia 12 的 raw input API 不再允许旧方式直接复用,需要实现局部兼容层,不改变公开属性。
-
-### Overlay 定位与尺寸
-
-Overlay Dialog 不使用旧 `ManagedDialogPositioner`。使用 Popup owner 的可用尺寸:
-
-- `TopLevel.ClientSize`
-- 或 `PlacementTarget` 所在 visual root/client bounds
-- 作为 `NotifyDialogHostMeasured` 的 bounds
-
-通用 `DialogPlacementCalculator` 定位规则:
-
-- `HorizontalStartupLocation.Left` -> `OffsetX=0`
-- `HorizontalStartupLocation.Center` -> `(ownerWidth - hostWidth) / 2`
-- `HorizontalStartupLocation.Right` -> `ownerWidth - hostWidth`
-- `HorizontalStartupLocation.Custom` -> `HorizontalOffset.Resolve(ownerWidth)`
-- vertical 同理
-
-拖拽时:
-
-- 更新 `OffsetX` / `OffsetY`,由 `OverlayDialogHost` 在自己的 full-overlay panel 内重新 arrange frame。
-- 不回写 `HorizontalStartupLocation` / `VerticalStartupLocation`。
-
-Popup Dialog 固定使用自己的 `CustomPopupPlacementCallback`:
-
-- 不使用 Popup 的普通 `Placement` 语义。
-- 要考虑 Dialog offset:接口实现负责设置/更新 offset。
-- callback 只处理 Dialog 的 top-left 位置。
-- callback 根据当前 offset 定位 Dialog。
-- callback 不实现 5.0 `ManagedDialogPositioner` 那种复杂 flip/constraint 算法。
-
-```text
-PopupDialogPlacementController.UpdatePlacement()
- offset = DialogPlacementCalculator.Calculate(...)
- popup.InvalidatePosition()
-
-DialogCustomPopupPlacementCallback(ownerSize, hostSize, current offset)
- returns top-left custom placement from offset
-```
-
-最大化时:
-
-- 保存 `_originPosition` 和 `_latestSize`。
-- `WindowState=Maximized` 后 dialog frame 填满 popup owner 可视区域。
-- `CornerRadius=0`。
-- resizer 隐藏。
-
-还原时:
-
-- 恢复最大化前位置和尺寸。
-
-### Overlay 与新 Popup 架构的关系
-
-Overlay Dialog 不应复活旧 `PopupBuddyLayer` 或旧 `DialogLayer`。
-
-Overlay Dialog 直接使用新 Popup 架构:
-
-- `Popup.ShouldUseOverlayLayer=true`
-- `Popup.PlacementTarget = Dialog.PlacementTarget ?? topLevel/root`
-- `Popup` 负责 OverlayLayer/OverlayPopupHost 生命周期。
-- `OverlayDialogHost` 负责 Dialog mask、frame、drag、resize、maximize/restore。
-- `PopupMotionActor`/`MotionActor` 的动画调度模式可以复用,但 Dialog 当前也可继续使用 host transitions,前提是视觉不变。
-- `ShadowsAwareContainer` 的阴影测量思路可以参考,但 Dialog 当前可继续通过 `ShadowFrame` + token shadow 实现,避免影响 UI。
-
-Popup 配置必须满足:
-
-- `Popup.ShouldUseOverlayLayer=true`
-- `Popup.IsLightDismissEnabled=false`,light dismiss 由 Dialog mask 统一处理。
-- `Popup.StaysOpen=true` 或等价设置,避免 Popup 自己绕过 Dialog 生命周期关闭。
-- `Popup` close/cancel 事件必须转发到 `Dialog.NotifyClose()`,不能直接销毁。
-- Popup content 的 root 尺寸应覆盖 owner 可视区域,以支持 modal mask。
-- Popup 定位固定通过 Dialog 专用 `CustomPopupPlacementCallback` 实现:controller 设置 offset,callback 根据 offset 定位;不使用通用 `Placement`,不使用 `ManagedDialogPositioner`。
-
-## Dialog.OpenAsync 实现计划
-
-### 打开流程
-
-`OpenAsync` 应补齐为:
-
-```text
-if already open/opening -> return
-resolve placementTarget
-resolve topLevel
-create host by DialogHostType
-set child/content
-relay properties and token bindings
-subscribe parent closed/detached/raw input if needed
-create DialogOpenState
-set IsOpen=true under ignore scope
-host.Show()
-raise Opened
-if IsModal:
- await close task
-else:
- return after show
-```
-
-需要内部增加 close completion:
-
-```csharp
-TaskCompletionSource
@@ -42,7 +42,7 @@
IsOpen="{TemplateBinding IsPickerOpen, Mode=TwoWay}"
MarginToAnchor="{TemplateBinding MarginToAnchor}">
diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml
index a505d9387..55d9c6c14 100644
--- a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml
@@ -9,7 +9,7 @@
-
-
diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorPickerInput.axaml b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorPickerInput.axaml
index 77774d693..bd3dd3eae 100644
--- a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorPickerInput.axaml
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorPickerInput.axaml
@@ -6,7 +6,7 @@
-
+
-
+
-
+
diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorSpectrumTheme.axaml b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorSpectrumTheme.axaml
index 10e958124..8a2256aae 100644
--- a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorSpectrumTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorView/ColorSpectrumTheme.axaml
@@ -10,13 +10,13 @@
-
-
-
diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/GradientColorPickerTheme.axaml b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/GradientColorPickerTheme.axaml
index 82842d753..f1f9e7f1f 100644
--- a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/GradientColorPickerTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/GradientColorPickerTheme.axaml
@@ -12,7 +12,7 @@
-
+ IsVisible="{TemplateBinding IsTextVisible}" />
@@ -42,7 +42,7 @@
IsOpen="{TemplateBinding IsPickerOpen, Mode=TwoWay}"
MarginToAnchor="{TemplateBinding MarginToAnchor}">
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.Privates.cs b/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.Privates.cs
index eecef480e..438108288 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.Privates.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.Privates.cs
@@ -32,7 +32,7 @@ public abstract partial class DataGridColumn : IDataGridColumnGroupItemInternal
internal bool? CanUserResizeInternal { get; set; }
internal bool? CanUserSortInternal { get; set; }
internal bool? CanUserFilterInternal { get; set; }
- internal bool? ShowSorterTooltipInternal { get; set; }
+ internal bool? IsSorterTooltipVisibleInternal { get; set; }
DataGridHeaderViewItem? IDataGridColumnGroupItemInternal.GroupHeaderViewItem { get; set; }
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.cs b/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.cs
index 7a215b189..a88ef24c3 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumn.cs
@@ -267,26 +267,26 @@ public abstract partial class DataGridColumn : AvaloniaObject
}
}
- public bool ShowSorterTooltip
+ public bool IsSorterTooltipVisible
{
get
{
- var showSorterTooltip = ShowSorterTooltipInternal ??
- OwningGrid?.ShowSorterTooltip ??
- DataGrid.DefaultShowSorterTooltip;
+ var isSorterTooltipVisible = IsSorterTooltipVisibleInternal ??
+ OwningGrid?.IsSorterTooltipVisible ??
+ DataGrid.DefaultIsSorterTooltipVisible;
if (HasHeaderCell)
{
- HeaderCell.ShowSorterTooltip = showSorterTooltip;
+ HeaderCell.IsSorterTooltipVisible = isSorterTooltipVisible;
}
- return showSorterTooltip;
+ return isSorterTooltipVisible;
}
set
{
- ShowSorterTooltipInternal = value;
+ IsSorterTooltipVisibleInternal = value;
if (HasHeaderCell)
{
- HeaderCell.ShowSorterTooltip = value;
+ HeaderCell.IsSorterTooltipVisible = value;
}
}
}
@@ -462,7 +462,7 @@ public abstract partial class DataGridColumn : AvaloniaObject
///
/// Whether multiple filters can be selected
///
- public bool FilterMultiple { get; set; } = true;
+ public bool IsMultipleFilterEnabled { get; set; } = true;
///
/// Whether to trigger filter when the filter menu closes
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumnHeader.Sorting.cs b/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumnHeader.Sorting.cs
index c667dbaa0..934a7302d 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumnHeader.Sorting.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Column/DataGridColumnHeader.Sorting.cs
@@ -38,11 +38,11 @@ internal partial class DataGridColumnHeader
internal static readonly StyledProperty SupportedSortDirectionsProperty =
DataGridColumn.SupportedSortDirectionsProperty.AddOwner();
- internal static readonly DirectProperty ShowSorterTooltipProperty =
+ internal static readonly DirectProperty IsSorterTooltipVisibleProperty =
AvaloniaProperty.RegisterDirect(
- nameof(ShowSorterTooltip),
- o => o.ShowSorterTooltip,
- (o, v) => o.ShowSorterTooltip = v);
+ nameof(IsSorterTooltipVisible),
+ o => o.IsSorterTooltipVisible,
+ (o, v) => o.IsSorterTooltipVisible = v);
public static readonly StyledProperty SortTooltipTypeProperty =
AvaloniaProperty.Register(nameof(SortTooltipType));
@@ -69,12 +69,12 @@ internal partial class DataGridColumnHeader
set => SetValue(SupportedSortDirectionsProperty, value);
}
- private bool _showSorterTooltip;
+ private bool _isSorterTooltipVisible;
- internal bool ShowSorterTooltip
+ internal bool IsSorterTooltipVisible
{
- get => _showSorterTooltip;
- set => SetAndRaise(ShowSorterTooltipProperty, ref _showSorterTooltip, value);
+ get => _isSorterTooltipVisible;
+ set => SetAndRaise(IsSorterTooltipVisibleProperty, ref _isSorterTooltipVisible, value);
}
internal DataGridSortTooltipType SortTooltipType
@@ -87,15 +87,15 @@ internal partial class DataGridColumnHeader
private void NotifyPropertyChangedForSorting(AvaloniaPropertyChangedEventArgs change)
{
- if (change.Property == ShowSorterTooltipProperty || change.Property == CurrentSortingStateProperty)
+ if (change.Property == IsSorterTooltipVisibleProperty || change.Property == CurrentSortingStateProperty)
{
- ConfigureShowSorterTooltip();
+ ConfigureIsSorterTooltipVisible();
}
}
- private void ConfigureShowSorterTooltip()
+ private void ConfigureIsSorterTooltipVisible()
{
- if (!ShowSorterTooltip || SupportedSortDirections == DataGridSortDirections.None)
+ if (!IsSorterTooltipVisible || SupportedSortDirections == DataGridSortDirections.None)
{
return;
}
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs b/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs
index cf7f8a2e3..d741a065f 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs
@@ -26,8 +26,8 @@ internal class DataGridFilterIndicator : IconButton
o => o.FilterMode,
(o, v) => o.FilterMode = v);
- public static readonly StyledProperty FilterMultipleProperty =
- AvaloniaProperty.Register(nameof(FilterMultiple));
+ public static readonly StyledProperty IsMultipleFilterEnabledProperty =
+ AvaloniaProperty.Register(nameof(IsMultipleFilterEnabled));
public event EventHandler? FilterRequest;
@@ -45,10 +45,10 @@ internal class DataGridFilterIndicator : IconButton
set => SetAndRaise(FilterModeProperty, ref _filterMode, value);
}
- public bool FilterMultiple
+ public bool IsMultipleFilterEnabled
{
- get => GetValue(FilterMultipleProperty);
- set => SetValue(FilterMultipleProperty, value);
+ get => GetValue(IsMultipleFilterEnabledProperty);
+ set => SetValue(IsMultipleFilterEnabledProperty, value);
}
#endregion
@@ -83,7 +83,7 @@ internal class DataGridFilterIndicator : IconButton
if (_owningColumn != null)
{
FilterMode = _owningColumn.FilterMode;
- FilterMultiple = _owningColumn.FilterMultiple;
+ IsMultipleFilterEnabled = _owningColumn.IsMultipleFilterEnabled;
}
}
}
@@ -132,7 +132,7 @@ internal class DataGridFilterIndicator : IconButton
{
var menuFlyout = new DataGridMenuFilterFlyout
{
- IsShowArrow = false,
+ IsArrowVisible = false,
Placement = PlacementMode.BottomEdgeAlignedRight,
ShouldUseOverlayPopup = true,
};
@@ -152,18 +152,18 @@ internal class DataGridFilterIndicator : IconButton
{
var treeFlyout = new DataGridTreeFilterFlyout
{
- IsShowArrow = false,
+ IsArrowVisible = false,
Placement = PlacementMode.BottomEdgeAlignedRight,
ShouldUseOverlayPopup = true
};
- BindUtils.RelayBind(this, FilterMultipleProperty, treeFlyout, DataGridTreeFilterFlyout.ToggleTypeProperty,
+ BindUtils.RelayBind(this, IsMultipleFilterEnabledProperty, treeFlyout, DataGridTreeFilterFlyout.ToggleTypeProperty,
(v) =>
{
return v ? ItemToggleType.CheckBox : ItemToggleType.Radio;
});
treeFlyout[!MotionAwareControlProperty.IsMotionEnabledProperty] = owningGrid[!MotionAwareControlProperty.IsMotionEnabledProperty];
var treeItems = BuildTreeItems(OwningColumn.Filters.ToList());
- if (FilterMultiple)
+ if (IsMultipleFilterEnabled)
{
var selectAllTreeItem = new DataGridFilterTreeViewItem();
selectAllTreeItem[!DataGridFilterTreeViewItem.HeaderProperty] = this[!SelectedAllTextProperty];
@@ -198,7 +198,7 @@ internal class DataGridFilterIndicator : IconButton
FilterValue = item.Value,
StaysOpenOnClick = true
};
- BindUtils.RelayBind(this, FilterMultipleProperty, menuItem, MenuItem.ToggleTypeProperty, (v) =>
+ BindUtils.RelayBind(this, IsMultipleFilterEnabledProperty, menuItem, MenuItem.ToggleTypeProperty, (v) =>
{
return v ? MenuItemToggleType.CheckBox : MenuItemToggleType.Radio;
}, BindingPriority.Template);
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridMenuFilterFlyout.cs b/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridMenuFilterFlyout.cs
index b3a2e7411..4de6b9072 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridMenuFilterFlyout.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridMenuFilterFlyout.cs
@@ -36,7 +36,7 @@ internal class DataGridMenuFilterFlyout : MenuFlyout
Presenter[!MenuFlyoutPresenter.ItemTemplateProperty] = this[!ItemTemplateProperty];
Presenter[!MenuFlyoutPresenter.ItemContainerThemeProperty] = this[!ItemContainerThemeProperty];
- Presenter[!MenuFlyoutPresenter.IsShowArrowProperty] = this[!IsShowArrowEffectiveProperty];
+ Presenter[!MenuFlyoutPresenter.IsArrowVisibleProperty] = this[!IsArrowVisibleEffectiveProperty];
Presenter[!MenuFlyoutPresenter.IsMotionEnabledProperty] = this[!IsMotionEnabledProperty];
Presenter[!MenuFlyoutPresenter.ArrowPositionProperty] = this[!ArrowPositionProperty];
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs b/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs
index edf5df75c..74ee670a3 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs
@@ -45,7 +45,7 @@ internal class DataGridTreeFilterFlyout : TreeViewFlyout
}
presenter[!DataGridTreeFilterFlyoutPresenter.IsMotionEnabledProperty] = this[!IsMotionEnabledProperty];
- presenter[!DataGridTreeFilterFlyoutPresenter.IsShowArrowProperty] = this[!IsShowArrowEffectiveProperty];
+ presenter[!DataGridTreeFilterFlyoutPresenter.IsArrowVisibleProperty] = this[!IsArrowVisibleEffectiveProperty];
presenter[!DataGridTreeFilterFlyoutPresenter.ArrowPositionProperty] = this[!ArrowPositionProperty];
presenter[!DataGridTreeFilterFlyoutPresenter.ToggleTypeProperty] = this[!ToggleTypeProperty];
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Columns.cs b/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Columns.cs
index 6c41456c1..ffd15ca4f 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Columns.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Columns.cs
@@ -1802,7 +1802,7 @@ public partial class DataGrid
Debug.Assert(!_columnHeadersPresenter.Children.Contains(dataGridColumn.HeaderCell));
dataGridColumn.HeaderCell.CanUserSort = dataGridColumn.CanUserSort;
dataGridColumn.HeaderCell.CanUserFilter = dataGridColumn.CanUserFilter;
- dataGridColumn.HeaderCell.ShowSorterTooltip = dataGridColumn.ShowSorterTooltip;
+ dataGridColumn.HeaderCell.IsSorterTooltipVisible = dataGridColumn.IsSorterTooltipVisible;
_columnHeadersPresenter.Children.Insert(dataGridColumn.DisplayIndexWithFiller, dataGridColumn.HeaderCell);
}
}
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Privates.cs b/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Privates.cs
index 02030e449..25913e672 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Privates.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.Privates.cs
@@ -29,7 +29,7 @@ public partial class DataGrid
internal const bool DefaultCanUserResizeColumns = true;
internal const bool DefaultCanUserSortColumns = false;
internal const bool DefaultCanUserFilterColumns = false;
- internal const bool DefaultShowSorterTooltip = false;
+ internal const bool DefaultIsSorterTooltipVisible = false;
#region 内部属性定义
@@ -1460,7 +1460,7 @@ public partial class DataGrid
column.HeaderCell.CanUserSort = column.CanUserSort;
column.HeaderCell.CanUserFilter = column.CanUserFilter;
- column.HeaderCell.ShowSorterTooltip = column.ShowSorterTooltip;
+ column.HeaderCell.IsSorterTooltipVisible = column.IsSorterTooltipVisible;
}
PseudoClasses.Set(DataGridPseudoClass.EmptyColumns, !visibleColumns.Any());
@@ -4669,7 +4669,7 @@ public partial class DataGrid
private void ConfigureFrameBorderThickness()
{
- if (!IsShowFrameBorder)
+ if (!IsFrameBorderVisible)
{
SetValue(FrameBorderThicknessProperty, new Thickness(0), BindingPriority.Template);
}
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.cs b/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.cs
index 02f9f3421..3667e458e 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.cs
+++ b/src/AtomUI.Desktop.Controls.DataGrid/DataGrid.cs
@@ -46,8 +46,8 @@ public partial class DataGrid : TemplatedControl,
public static readonly StyledProperty CustomOperatingIndicatorTemplateProperty =
AvaloniaProperty.Register(nameof(CustomOperatingIndicatorTemplate));
- public static readonly StyledProperty IsShowFrameBorderProperty =
- AvaloniaProperty.Register(nameof(IsShowFrameBorder), false);
+ public static readonly StyledProperty IsFrameBorderVisibleProperty =
+ AvaloniaProperty.Register(nameof(IsFrameBorderVisible), false);
public static readonly StyledProperty CanUserReorderColumnsProperty =
AvaloniaProperty.Register(nameof(CanUserReorderColumns));
@@ -64,8 +64,8 @@ public partial class DataGrid : TemplatedControl,
public static readonly StyledProperty CanUserReorderRowsProperty =
AvaloniaProperty.Register(nameof(CanUserReorderRows), false);
- public static readonly StyledProperty ShowSorterTooltipProperty =
- AvaloniaProperty.Register(nameof(ShowSorterTooltip), true);
+ public static readonly StyledProperty IsSorterTooltipVisibleProperty =
+ AvaloniaProperty.Register(nameof(IsSorterTooltipVisible), true);
public static readonly StyledProperty ColumnHeaderHeightProperty =
AvaloniaProperty.Register(nameof(ColumnHeaderHeight), defaultValue: double.NaN, validate: IsValidColumnHeaderHeight);
@@ -255,10 +255,10 @@ public partial class DataGrid : TemplatedControl,
set => SetValue(CustomOperatingIndicatorTemplateProperty, value);
}
- public bool IsShowFrameBorder
+ public bool IsFrameBorderVisible
{
- get => GetValue(IsShowFrameBorderProperty);
- set => SetValue(IsShowFrameBorderProperty, value);
+ get => GetValue(IsFrameBorderVisibleProperty);
+ set => SetValue(IsFrameBorderVisibleProperty, value);
}
///
@@ -311,10 +311,10 @@ public partial class DataGrid : TemplatedControl,
///
/// If header show next sorter direction tooltip
///
- public bool ShowSorterTooltip
+ public bool IsSorterTooltipVisible
{
- get => GetValue(ShowSorterTooltipProperty);
- set => SetValue(ShowSorterTooltipProperty, value);
+ get => GetValue(IsSorterTooltipVisibleProperty);
+ set => SetValue(IsSorterTooltipVisibleProperty, value);
}
///
@@ -1616,7 +1616,7 @@ public partial class DataGrid : TemplatedControl,
_topRightCornerHeader = e.NameScope.Find(DataGridThemeConstants.TopRightCornerPart);
_bottomRightCorner = e.NameScope.Find(DataGridThemeConstants.BottomRightCornerPart);
- if (IsShowFrameBorder)
+ if (IsFrameBorderVisible)
{
ConfigureFrameBorderThickness();
}
@@ -1756,7 +1756,7 @@ public partial class DataGrid : TemplatedControl,
if (change.Property == BorderThicknessProperty ||
change.Property == GridLinesVisibilityProperty ||
- change.Property == IsShowFrameBorderProperty ||
+ change.Property == IsFrameBorderVisibleProperty ||
change.Property == FooterProperty)
{
ConfigureFrameBorderThickness();
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml b/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml
index 8f02f3d6f..969c38640 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml
@@ -7,9 +7,9 @@
xmlns:atom="https://atomui.net">
-
-
-
+
+
+
-
-
-
-
-
@@ -153,7 +153,7 @@
Value="{atom:DataGridTokenResource HeaderSortActiveBg}" />
-
@@ -177,7 +177,7 @@
@@ -185,7 +185,7 @@
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridTheme.axaml b/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridTheme.axaml
index a6bb7067a..cacad9516 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Themes/DataGridTheme.axaml
@@ -13,7 +13,7 @@
CornerRadius="{TemplateBinding CornerRadius, Converter={x:Static atom:DataGridTheme.HeaderCornerRadiusConverter}}"
ClipToBounds="True">
-
diff --git a/src/AtomUI.Desktop.Controls.DataGrid/Themes/Filters/DataGridMenuFilterFlyoutPresenterTheme.axaml b/src/AtomUI.Desktop.Controls.DataGrid/Themes/Filters/DataGridMenuFilterFlyoutPresenterTheme.axaml
index 2dd8a05ef..df87acbff 100644
--- a/src/AtomUI.Desktop.Controls.DataGrid/Themes/Filters/DataGridMenuFilterFlyoutPresenterTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.DataGrid/Themes/Filters/DataGridMenuFilterFlyoutPresenterTheme.axaml
@@ -12,7 +12,7 @@
AllowSpinProperty =
- AvaloniaProperty.Register(nameof(AllowSpin), true);
+ public static readonly StyledProperty IsSpinEnabledProperty =
+ AvaloniaProperty.Register(nameof(IsSpinEnabled), true);
- public static readonly StyledProperty ShowButtonSpinnerProperty =
- AvaloniaProperty.Register(nameof(ShowButtonSpinner), true);
+ public static readonly StyledProperty IsButtonSpinnerVisibleProperty =
+ AvaloniaProperty.Register(nameof(IsButtonSpinnerVisible), true);
public static readonly StyledProperty ButtonSpinnerLocationProperty =
AvaloniaProperty.Register(nameof(ButtonSpinnerLocation), ButtonSpinnerLocation.Right);
@@ -76,16 +76,16 @@ public class ButtonSpinner : Spinner,
public static readonly StyledProperty IsMotionEnabledProperty =
MotionAwareControlProperty.IsMotionEnabledProperty.AddOwner();
- public bool AllowSpin
+ public bool IsSpinEnabled
{
- get => GetValue(AllowSpinProperty);
- set => SetValue(AllowSpinProperty, value);
+ get => GetValue(IsSpinEnabledProperty);
+ set => SetValue(IsSpinEnabledProperty, value);
}
- public bool ShowButtonSpinner
+ public bool IsButtonSpinnerVisible
{
- get => GetValue(ShowButtonSpinnerProperty);
- set => SetValue(ShowButtonSpinnerProperty, value);
+ get => GetValue(IsButtonSpinnerVisibleProperty);
+ set => SetValue(IsButtonSpinnerVisibleProperty, value);
}
public ButtonSpinnerLocation ButtonSpinnerLocation
@@ -223,7 +223,7 @@ public class ButtonSpinner : Spinner,
static ButtonSpinner()
{
- AllowSpinProperty.Changed.Subscribe(AllowSpinChanged);
+ IsSpinEnabledProperty.Changed.Subscribe(IsSpinEnabledChanged);
}
public ButtonSpinner()
@@ -395,7 +395,7 @@ public class ButtonSpinner : Spinner,
{
base.OnPointerWheelChanged(e);
- if (AllowSpin && IsKeyboardFocusWithin && e.Delta.Y != 0)
+ if (IsSpinEnabled && IsKeyboardFocusWithin && e.Delta.Y != 0)
{
var direction = e.Delta.Y < 0 ? SpinDirection.Decrease : SpinDirection.Increase;
OnSpin(new SpinEventArgs(SpinEvent, direction, true));
@@ -409,7 +409,7 @@ public class ButtonSpinner : Spinner,
{
case Key.Up:
{
- if (AllowSpin)
+ if (IsSpinEnabled)
{
OnSpin(new SpinEventArgs(SpinEvent, SpinDirection.Increase));
e.Handled = true;
@@ -418,7 +418,7 @@ public class ButtonSpinner : Spinner,
}
case Key.Down:
{
- if (AllowSpin)
+ if (IsSpinEnabled)
{
OnSpin(new SpinEventArgs(SpinEvent, SpinDirection.Decrease));
e.Handled = true;
@@ -443,18 +443,18 @@ public class ButtonSpinner : Spinner,
SetButtonUsage();
}
- protected virtual void OnAllowSpinChanged(bool oldValue, bool newValue)
+ protected virtual void OnIsSpinEnabledChanged(bool oldValue, bool newValue)
{
SetButtonUsage();
}
- private static void AllowSpinChanged(AvaloniaPropertyChangedEventArgs change)
+ private static void IsSpinEnabledChanged(AvaloniaPropertyChangedEventArgs change)
{
if (change.Sender is ButtonSpinner spinner)
{
var oldValue = (bool)change.OldValue!;
var newValue = (bool)change.NewValue!;
- spinner.OnAllowSpinChanged(oldValue, newValue);
+ spinner.OnIsSpinEnabledChanged(oldValue, newValue);
}
}
@@ -462,18 +462,18 @@ public class ButtonSpinner : Spinner,
{
if (IncreaseButton != null)
{
- IncreaseButton.IsEnabled = AllowSpin && ((ValidSpinDirection & ValidSpinDirections.Increase) == ValidSpinDirections.Increase);
+ IncreaseButton.IsEnabled = IsSpinEnabled && ((ValidSpinDirection & ValidSpinDirections.Increase) == ValidSpinDirections.Increase);
}
if (DecreaseButton != null)
{
- DecreaseButton.IsEnabled = AllowSpin && ((ValidSpinDirection & ValidSpinDirections.Decrease) == ValidSpinDirections.Decrease);
+ DecreaseButton.IsEnabled = IsSpinEnabled && ((ValidSpinDirection & ValidSpinDirections.Decrease) == ValidSpinDirections.Decrease);
}
}
private void HandleButtonClick(object? sender, RoutedEventArgs e)
{
- if (AllowSpin)
+ if (IsSpinEnabled)
{
var direction = sender == IncreaseButton ? SpinDirection.Increase : SpinDirection.Decrease;
OnSpin(new SpinEventArgs(SpinEvent, direction));
diff --git a/src/AtomUI.Desktop.Controls/ButtonSpinner/ButtonSpinnerDecoratedBox.cs b/src/AtomUI.Desktop.Controls/ButtonSpinner/ButtonSpinnerDecoratedBox.cs
index 45b9eb94a..dfc42ba49 100644
--- a/src/AtomUI.Desktop.Controls/ButtonSpinner/ButtonSpinnerDecoratedBox.cs
+++ b/src/AtomUI.Desktop.Controls/ButtonSpinner/ButtonSpinnerDecoratedBox.cs
@@ -54,10 +54,10 @@ internal class ButtonSpinnerDecoratedBox : AddOnDecoratedBox
#region 内部属性定义
- internal static readonly DirectProperty ShowButtonSpinnerProperty =
- AvaloniaProperty.RegisterDirect(nameof(ShowButtonSpinner),
- o => o.ShowButtonSpinner,
- (o, v) => o.ShowButtonSpinner = v);
+ internal static readonly DirectProperty IsButtonSpinnerVisibleProperty =
+ AvaloniaProperty.RegisterDirect(nameof(IsButtonSpinnerVisible),
+ o => o.IsButtonSpinnerVisible,
+ (o, v) => o.IsButtonSpinnerVisible = v);
internal static readonly DirectProperty SpinnerBorderThicknessProperty =
AvaloniaProperty.RegisterDirect(nameof(SpinnerBorderThickness),
@@ -96,10 +96,10 @@ internal class ButtonSpinnerDecoratedBox : AddOnDecoratedBox
private bool _showButtonSpinner;
- internal bool ShowButtonSpinner
+ internal bool IsButtonSpinnerVisible
{
get => _showButtonSpinner;
- set => SetAndRaise(ShowButtonSpinnerProperty, ref _showButtonSpinner, value);
+ set => SetAndRaise(IsButtonSpinnerVisibleProperty, ref _showButtonSpinner, value);
}
private Thickness _spinnerBorderThickness;
diff --git a/src/AtomUI.Desktop.Controls/ButtonSpinner/Themes/ButtonSpinnerTheme.axaml b/src/AtomUI.Desktop.Controls/ButtonSpinner/Themes/ButtonSpinnerTheme.axaml
index cbfffa659..31f897ef8 100644
--- a/src/AtomUI.Desktop.Controls/ButtonSpinner/Themes/ButtonSpinnerTheme.axaml
+++ b/src/AtomUI.Desktop.Controls/ButtonSpinner/Themes/ButtonSpinnerTheme.axaml
@@ -17,7 +17,7 @@
StyleVariant="{TemplateBinding StyleVariant}"
SizeType="{TemplateBinding SizeType}"
Status="{TemplateBinding Status}"
- IsShowHandle="{TemplateBinding ShowButtonSpinner}"
+ IsShowHandle="{TemplateBinding IsButtonSpinnerVisible}"
IsHandleFloatable="{TemplateBinding IsButtonSpinnerFloatable}"
ButtonSpinnerLocation="{TemplateBinding ButtonSpinnerLocation}"
Focusable="True"
diff --git a/src/AtomUI.Desktop.Controls/Buttons/DropdownButton.cs b/src/AtomUI.Desktop.Controls/Buttons/DropdownButton.cs
index 6464dbae0..848357d48 100644
--- a/src/AtomUI.Desktop.Controls/Buttons/DropdownButton.cs
+++ b/src/AtomUI.Desktop.Controls/Buttons/DropdownButton.cs
@@ -21,8 +21,8 @@ public class DropdownButton : Button
public static readonly StyledProperty TriggerTypeProperty =
FlyoutStateHelper.TriggerTypeProperty.AddOwner();
- public static readonly StyledProperty IsShowArrowProperty =
- ArrowDecoratedBox.IsShowArrowProperty.AddOwner();
+ public static readonly StyledProperty IsArrowVisibleProperty =
+ ArrowDecoratedBox.IsArrowVisibleProperty.AddOwner();
public static readonly StyledProperty IsPointAtCenterProperty =
FlyoutControl.IsPointAtCenterProperty.AddOwner();
@@ -66,10 +66,10 @@ public class DropdownButton : Button
set => SetValue(TriggerTypeProperty, value);
}
- public bool IsShowArrow
+ public bool IsArrowVisible
{
- get => GetValue(IsShowArrowProperty);
- set => SetValue(IsShowArrowProperty, value);
+ get => GetValue(IsArrowVisibleProperty);
+ set => SetValue(IsArrowVisibleProperty, value);
}
public bool IsPointAtCenter
@@ -170,7 +170,7 @@ public class DropdownButton : Button
static DropdownButton()
{
PlacementProperty.OverrideDefaultValue(PlacementMode.BottomEdgeAlignedLeft);
- IsShowArrowProperty.OverrideDefaultValue(false);
+ IsArrowVisibleProperty.OverrideDefaultValue(false);
}
public DropdownButton()
@@ -219,7 +219,7 @@ public class DropdownButton : Button
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, PlacementProperty, menuFlyout, FlyoutControl.RequestedPlacementProperty));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, PlacementAnchorProperty, menuFlyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, PlacementGravityProperty, menuFlyout));
- _flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsShowArrowProperty, menuFlyout));
+ _flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsArrowVisibleProperty, menuFlyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsPointAtCenterProperty, menuFlyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, MarginToAnchorProperty, menuFlyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsMotionEnabledProperty, menuFlyout));
diff --git a/src/AtomUI.Desktop.Controls/Buttons/SplitButton.cs b/src/AtomUI.Desktop.Controls/Buttons/SplitButton.cs
index 91c147786..e926e3511 100644
--- a/src/AtomUI.Desktop.Controls/Buttons/SplitButton.cs
+++ b/src/AtomUI.Desktop.Controls/Buttons/SplitButton.cs
@@ -46,8 +46,8 @@ public class SplitButton : ContentControl,
public static readonly StyledProperty TriggerTypeProperty =
FlyoutStateHelper.TriggerTypeProperty.AddOwner();
- public static readonly StyledProperty IsShowArrowProperty =
- ArrowDecoratedBox.IsShowArrowProperty.AddOwner();
+ public static readonly StyledProperty IsArrowVisibleProperty =
+ ArrowDecoratedBox.IsArrowVisibleProperty.AddOwner();
public static readonly StyledProperty IsPointAtCenterProperty =
Flyout.IsPointAtCenterProperty.AddOwner();
@@ -139,10 +139,10 @@ public class SplitButton : ContentControl,
set => SetValue(TriggerTypeProperty, value);
}
- public bool IsShowArrow
+ public bool IsArrowVisible
{
- get => GetValue(IsShowArrowProperty);
- set => SetValue(IsShowArrowProperty, value);
+ get => GetValue(IsArrowVisibleProperty);
+ set => SetValue(IsArrowVisibleProperty, value);
}
public bool IsPointAtCenter
@@ -304,7 +304,7 @@ public class SplitButton : ContentControl,
static SplitButton()
{
PlacementProperty.OverrideDefaultValue(PlacementMode.BottomEdgeAlignedRight);
- IsShowArrowProperty.OverrideDefaultValue(false);
+ IsArrowVisibleProperty.OverrideDefaultValue(false);
HorizontalAlignmentProperty.OverrideDefaultValue(HorizontalAlignment.Left);
VerticalAlignmentProperty.OverrideDefaultValue(VerticalAlignment.Top);
AffectsRender(IsPrimaryButtonTypeProperty, IsDangerProperty, SplitSeparatorBrushProperty);
@@ -399,7 +399,7 @@ public class SplitButton : ContentControl,
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, PlacementProperty, flyout, Flyout.RequestedPlacementProperty, (PlacementMode v) => (PlacementMode?)v));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, PlacementAnchorProperty, flyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, PlacementGravityProperty, flyout));
- _flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsShowArrowProperty, flyout));
+ _flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsArrowVisibleProperty, flyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsPointAtCenterProperty, flyout));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, GutterToFlyoutProperty, flyout, MenuFlyout.MarginToAnchorProperty));
_flyoutBindingDisposables.Add(BindUtils.RelayBind(this, IsMotionEnabledProperty, flyout));
diff --git a/src/AtomUI.Desktop.Controls/Card/Card.cs b/src/AtomUI.Desktop.Controls/Card/Card.cs
index 33ee7a448..36a28ed0e 100644
--- a/src/AtomUI.Desktop.Controls/Card/Card.cs
+++ b/src/AtomUI.Desktop.Controls/Card/Card.cs
@@ -154,11 +154,11 @@ public class Card : HeaderedContentControl,
o => o.EffectiveCornerRadius,
(o, v) => o.EffectiveCornerRadius = v);
- internal static readonly DirectProperty ActionsPanelVisibleProperty =
+ internal static readonly DirectProperty IsActionsPanelVisibleProperty =
AvaloniaProperty.RegisterDirect(
- nameof(ActionsPanelVisible),
- o => o.ActionsPanelVisible,
- (o, v) => o.ActionsPanelVisible = v);
+ nameof(IsActionsPanelVisible),
+ o => o.IsActionsPanelVisible,
+ (o, v) => o.IsActionsPanelVisible = v);
internal static readonly DirectProperty ContentTypeProperty =
AvaloniaProperty.RegisterDirect(
@@ -192,10 +192,10 @@ public class Card : HeaderedContentControl,
private bool _actionsPanelVisible;
- internal bool ActionsPanelVisible
+ internal bool IsActionsPanelVisible
{
get => _actionsPanelVisible;
- set => SetAndRaise(ActionsPanelVisibleProperty, ref _actionsPanelVisible, value);
+ set => SetAndRaise(IsActionsPanelVisibleProperty, ref _actionsPanelVisible, value);
}
private CardContentType _contentType;
@@ -364,7 +364,7 @@ public class Card : HeaderedContentControl,
throw new NotSupportedException();
}
}
- SetCurrentValue(ActionsPanelVisibleProperty, Actions.Count > 0);
+ SetCurrentValue(IsActionsPanelVisibleProperty, Actions.Count > 0);
}
protected override void OnInitialized()
diff --git a/src/AtomUI.Desktop.Controls/Card/Themes/CardTheme.axaml b/src/AtomUI.Desktop.Controls/Card/Themes/CardTheme.axaml
index 4d0abd529..f2fb4fe69 100644
--- a/src/AtomUI.Desktop.Controls/Card/Themes/CardTheme.axaml
+++ b/src/AtomUI.Desktop.Controls/Card/Themes/CardTheme.axaml
@@ -34,7 +34,7 @@
DockPanel.Dock="Bottom"
CornerRadius="{TemplateBinding CornerRadius}"
IsMotionEnabled="{TemplateBinding IsMotionEnabled}"
- IsVisible="{TemplateBinding ActionsPanelVisible}" />
+ IsVisible="{TemplateBinding IsActionsPanelVisible}" />
ButtonsPanelVisibleProperty =
- AvaloniaProperty.RegisterDirect(nameof(ButtonsPanelVisible),
- o => o.ButtonsPanelVisible,
- (o, v) => o.ButtonsPanelVisible = v);
+ internal static readonly DirectProperty IsButtonsPanelVisibleProperty =
+ AvaloniaProperty.RegisterDirect(nameof(IsButtonsPanelVisible),
+ o => o.IsButtonsPanelVisible,
+ (o, v) => o.IsButtonsPanelVisible = v);
public static readonly StyledProperty TempSelectedTimeProperty =
AvaloniaProperty.Register(nameof(TempSelectedTime));
@@ -92,10 +92,10 @@ internal class DatePickerPresenter : PickerPresenterBase
private bool _buttonsPanelVisible = true;
- internal bool ButtonsPanelVisible
+ internal bool IsButtonsPanelVisible
{
get => _buttonsPanelVisible;
- set => SetAndRaise(ButtonsPanelVisibleProperty, ref _buttonsPanelVisible, value);
+ set => SetAndRaise(IsButtonsPanelVisibleProperty, ref _buttonsPanelVisible, value);
}
public TimeSpan? TempSelectedTime
@@ -116,7 +116,7 @@ internal class DatePickerPresenter : PickerPresenterBase
///
/// 当前是否处于选择中状态
///
- public event EventHandler? ChoosingStatueChanged;
+ public event EventHandler? ChoosingStatusChanged;
#endregion
@@ -135,12 +135,12 @@ internal class DatePickerPresenter : PickerPresenterBase
if (CalendarView is not null)
{
_pointerDisposables.Add(CalendarView.GetObservable(PickerCalendar.IsPointerInMonthViewProperty)
- .Subscribe(EmitChoosingStatueChanged));
+ .Subscribe(EmitChoosingStatusChanged));
}
if (TimeView is not null)
{
_pointerDisposables.Add(TimeView.GetObservable(TimeView.IsPointerInSelectorProperty)
- .Subscribe(EmitChoosingStatueChanged));
+ .Subscribe(EmitChoosingStatusChanged));
}
}
@@ -239,7 +239,7 @@ internal class DatePickerPresenter : PickerPresenterBase
protected virtual void NotifyPointerExitConfirmButton()
{
- EmitChoosingStatueChanged(false);
+ EmitChoosingStatusChanged(false);
}
protected virtual void NotifyPointerEnterTodayButton()
@@ -251,7 +251,7 @@ internal class DatePickerPresenter : PickerPresenterBase
protected virtual void NotifyPointerExitTodayButton()
{
- EmitChoosingStatueChanged(false);
+ EmitChoosingStatusChanged(false);
}
protected virtual void NotifyPointerEnterNowButton()
@@ -263,7 +263,7 @@ internal class DatePickerPresenter : PickerPresenterBase
protected virtual void NotifyPointerExitNowButton()
{
- EmitChoosingStatueChanged(false);
+ EmitChoosingStatusChanged(false);
}
private void HandleTodayButtonClicked(object? sender, RoutedEventArgs args)
@@ -408,13 +408,13 @@ internal class DatePickerPresenter : PickerPresenterBase
}
}
- ButtonsPanelVisible = NowButton.IsVisible || TodayButton.IsVisible || ConfirmButton.IsVisible;
+ IsButtonsPanelVisible = NowButton.IsVisible || TodayButton.IsVisible || ConfirmButton.IsVisible;
}
protected override void OnConfirmed()
{
CalendarView?.SetCurrentValue(PickerCalendar.SelectedDateProperty, SelectedDateTime);
- EmitChoosingStatueChanged(false);
+ EmitChoosingStatusChanged(false);
base.OnConfirmed();
}
@@ -423,9 +423,9 @@ internal class DatePickerPresenter : PickerPresenterBase
base.OnConfirmed();
}
- protected void EmitChoosingStatueChanged(bool isChoosing)
+ protected void EmitChoosingStatusChanged(bool isChoosing)
{
- ChoosingStatueChanged?.Invoke(this, new ChoosingStatusEventArgs(isChoosing));
+ ChoosingStatusChanged?.Invoke(this, new ChoosingStatusEventArgs(isChoosing));
}
protected override void OnDismiss()
diff --git a/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePicker.cs b/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePicker.cs
index 8b30d2907..d6e5debeb 100644
--- a/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePicker.cs
+++ b/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePicker.cs
@@ -175,7 +175,7 @@ public class RangeDatePicker : RangeInfoPickerInput
base.NotifyPickerOpened();
if (_pickerPresenter is not null)
{
- _pickerPresenter.ChoosingStatueChanged += HandleChoosingStatueChanged;
+ _pickerPresenter.ChoosingStatusChanged += HandleChoosingStatusChanged;
_pickerPresenter.HoverDateTimeChanged += HandleHoverDateTimeChanged;
_pickerPresenter.Confirmed += HandleConfirmed;
_pickerPresenter.RangePartConfirmed += HandleRangePartConfirmed;
@@ -198,7 +198,7 @@ public class RangeDatePicker : RangeInfoPickerInput
base.NotifyPickerClosed();
if (_pickerPresenter is not null)
{
- _pickerPresenter.ChoosingStatueChanged -= HandleChoosingStatueChanged;
+ _pickerPresenter.ChoosingStatusChanged -= HandleChoosingStatusChanged;
_pickerPresenter.HoverDateTimeChanged -= HandleHoverDateTimeChanged;
_pickerPresenter.Confirmed -= HandleConfirmed;
_pickerPresenter.RangePartConfirmed -= HandleRangePartConfirmed;
@@ -211,7 +211,7 @@ public class RangeDatePicker : RangeInfoPickerInput
}
}
- private void HandleChoosingStatueChanged(object? sender, ChoosingStatusEventArgs args)
+ private void HandleChoosingStatusChanged(object? sender, ChoosingStatusEventArgs args)
{
IsChoosing = args.IsChoosing;
UpdatePseudoClasses();
diff --git a/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePickerPresenter.cs b/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePickerPresenter.cs
index c3c571a0a..9e34a4727 100644
--- a/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePickerPresenter.cs
+++ b/src/AtomUI.Desktop.Controls/DatePicker/RangeDatePickerPresenter.cs
@@ -136,7 +136,7 @@ internal class RangeDatePickerPresenter : DatePickerPresenter
protected override void OnConfirmed()
{
- EmitChoosingStatueChanged(false);
+ EmitChoosingStatusChanged(false);
if (PickState.HasFlag(RangeDatePickState.PartStart) && PickState.HasFlag(RangeDatePickState.PartEnd))
{
diff --git a/src/AtomUI.Desktop.Controls/DatePicker/Themes/DatePickerPresenterTheme.axaml b/src/AtomUI.Desktop.Controls/DatePicker/Themes/DatePickerPresenterTheme.axaml
index 5175e8ab9..ea46a8f1c 100644
--- a/src/AtomUI.Desktop.Controls/DatePicker/Themes/DatePickerPresenterTheme.axaml
+++ b/src/AtomUI.Desktop.Controls/DatePicker/Themes/DatePickerPresenterTheme.axaml
@@ -11,7 +11,7 @@
LastChildFill="True">
VerticalOffsetProperty =
AvaloniaProperty.Register
@@ -37,7 +37,7 @@
-
+
@@ -56,7 +56,7 @@
-