# 现有反射扩展清单 > 本文档列出 AtomUI 项目中所有反射扩展类及其 Hook 的 Avalonia 内部成员。 > 升级 Avalonia 版本时,请逐一对照此清单验证兼容性。 > 最后更新:2026-04-11(基于 Avalonia v11.3.x) --- ## AtomUI.Core ### AnimatableReflectionExtensions | 文件 | `src/AtomUI.Core/Animations/AnimatableReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Animations` | | 目标类型 | `Avalonia.Animation.Animatable` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `EnableTransitions` | Method | NonPublicMethods | `EnableTransitions()` | | `DisableTransitions` | Method | NonPublicMethods | `DisableTransitions()` | --- ### DynamicResourceReflectionExtension | 文件 | `src/AtomUI.Core/Data/DynamicResourceReflectionExtension.cs` | |---|---| | 命名空间 | `AtomUI.Data` | | 目标类型 | `Avalonia.Markup.Xaml.MarkupExtensions.DynamicResourceExtension` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `_anchor` | Field | NonPublicFields | `SetAnchor(object?)` | --- ### StyledElementReflectionExtensions | 文件 | `src/AtomUI.Core/Reflection/StyledElementReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Reflection` | | 目标类型 | `Avalonia.Controls.StyledElement` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `LogicalChildren` | Property | NonPublicProperties | `GetLogicalChildrenList()`, `AddToLogicalChildren()`, `InsertToLogicalChildren()` | | `TemplatedParent` | Property | NonPublicProperties | `SetTemplatedParent()`, `SetTemplatedParentRecursive()` | --- ### VisualReflectionExtensions | 文件 | `src/AtomUI.Core/Controls/VisualReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Controls` | | 目标类型 | `Avalonia.Visual` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `SetVisualParent` | Method | NonPublicMethods | `SetVisualParent()`, `ClearVisualParentRecursive()` | | `VisualChildren` | Property | NonPublicProperties | `GetVisualChildrenList()`, `IndexOfVisualChildren()`, `AddToVisualChildren()`, `InsertToVisualChildren()` | --- ### ILayoutRootReflectionExtensions | 文件 | `src/AtomUI.Core/Controls/ILayoutRootReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Controls` | | 目标类型 | `Avalonia.Layout.ILayoutRoot` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `LayoutManager` | Property | NonPublicProperties | `GetLayoutManager()` | --- ### RawPointerEventTypeReflectionExtensions | 文件 | `src/AtomUI.Core/Controls/RawPointerEventTypeReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Controls` | | 目标类型 | `Avalonia.Input.Raw.RawPointerEventArgs` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `InputHitTestResult` | Property | NonPublicProperties | `GetInputHitTestResult()` | --- ### ItemCollectionReflectionExtensions | 文件 | `src/AtomUI.Core/Controls/ItemCollectionReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Controls` | | 目标类型 | `Avalonia.Controls.ItemCollection` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `SetItemsSource` | Method | NonPublicMethods | `SetItemsSource(IEnumerable?)` | --- ### ManagedPopupPositionerReflectionExtensions | 文件 | `src/AtomUI.Core/Utils/ManagedPopupPositionerReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Utils` | | 目标类型 | `Avalonia.Controls.Primitives.PopupPositioning.ManagedPopupPositioner` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `_popup` | Field | NonPublicFields | `GetManagedPopupPositionerPopup()` | --- ### AvaloniaPropertyReflectionExtensions | 文件 | `src/AtomUI.Core/Utils/AvaloniaPropertyReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Utils` | | 目标类型 | `Avalonia.AvaloniaProperty`(动态类型) | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `Notifying` | Property | NonPublicProperties | `InvokeNotifying(AvaloniaObject, bool)` | > ⚠️ **注意**:此类未使用标准的 `Lazy` + `[DynamicDependency]` 模式,因为目标类型是运行时动态确定的(`property.GetType()` 返回具体的泛型闭合类型)。这是一个特殊情况。 --- ### TransformTrackingHelper | 文件 | `src/AtomUI.Core/Input/TransformTrackingHelper.cs` | |---|---| | 命名空间 | `AtomUI.Input` | | 目标类型 | `Avalonia.Threading.DispatcherPriority` | | Hook 成员 | 类型 | 成员类型 | 扩展方法/使用方式 | |---|---|---|---| | `AfterRender` | Field (static) | NonPublicFields | 在 `EnqueueForUpdate()` 中获取调度优先级 | > **注意**:此类不是标准的 `ReflectionExtensions` 扩展类,而是一个独立的辅助类,内部使用了反射来访问 `DispatcherPriority.AfterRender` 静态私有字段。 --- ### TextParagraphPropertiesReflectionExtensions | 文件 | `src/AtomUI.Core/Media/TextFormatting/TextParagraphPropertiesReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Media.TextFormatting` | | 目标类型 | `Avalonia.Media.TextFormatting.TextParagraphProperties` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `LineSpacing` | Property | NonPublicProperties | `GetLineSpacing()`, `SetLineSpacing(double)` | --- ## AtomUI.Desktop.Controls ### TextBlockReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/TextBlock/TextBlockReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls` | | 目标类型 | `Avalonia.Controls.TextBlock` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `GetMaxSizeFromConstraint` | Method | NonPublicMethods | `GetMaxSizeFromConstraint()` | | `HasComplexContent` | Property | NonPublicProperties | `GetHasComplexContent()` | --- ### ScrollContentPresenterReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/TabControl/ScrollContentPresenterReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls` | | 目标类型 | `Avalonia.Controls.Presenters.ScrollContentPresenter` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `SnapOffset` | Method | NonPublicMethods | `SnapOffset(Vector, Vector, bool)` | --- ### SelectingItemsControlReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Primitives/SelectingItemsControlReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls.Primitives` | | 目标类型 | `Avalonia.Controls.Primitives.SelectingItemsControl` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `MarkContainerSelected` | Method | NonPublicMethods | `MarkContainerSelected(Control, bool)` | | `InitializeSelectionModel` | Method | NonPublicMethods | `InitializeSelectionModel(ISelectionModel)` | | `_selection` | Field | NonPublicFields | `SetSelection(ISelectionModel?)`, `GetSelection()` | --- ### SelectionModelReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Primitives/SelectionModelReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls.Primitives` | | 目标类型 | `Avalonia.Controls.Selection.SelectionModel<>` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `SetInitSelectedItems` | Method | NonPublicMethods | `SetInitSelectedItems(IList)` | | `SetSource` | Method | NonPublicMethods | `SetSource(IEnumerable?)` | > **注意**:泛型目标类型,使用 `ConcurrentDictionary` 缓存。 --- ### MenuReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Menu/MenuReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls` | | 目标类型 | `Avalonia.Controls.ContextMenu` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `_popup` | Field | NonPublicFields | `SetPopup(Popup)` | | 动态方法名 | Method | NonPublicMethods | `CreateEventHandler(string)`, `CreateEventHandler(string)` | --- ### ComboBoxReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/ComboBox/ComboBoxReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls` | | 目标类型 | `Avalonia.Controls.ComboBox` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `_popup` | Field | NonPublicFields | `SetPopup(Popup?)` | --- ### WindowBaseReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Window/WindowBaseReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls` | | 目标类型 | `Avalonia.Controls.WindowBase` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `FreezeVisibilityChangeHandling` | Method | NonPublicMethods | `FreezeVisibilityChangeHandling()` (private) | | `EnsureInitialized` | Method | NonPublicMethods | `EnsureInitialized()` (private) | | `_hasExecutedInitialLayoutPass` | Field | NonPublicFields | `HasExecutedInitialLayoutPass()`, `SetHasExecutedInitialLayoutPass()` (private) | | `StartRendering` | Method | NonPublicMethods | `StartRendering()` (private) | | `OnOpened` | Method | NonPublicMethods | `OnOpened(EventArgs)` (private) | > **注意**:此类展示了入口方法 `ShowWithoutActive()` 为 `public`,内部子步骤为 `private` 的组合模式。 --- ### PopupReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Popup/PopupReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls` | | 目标类型 | `AtomUI.Desktop.Controls.Popup` / `Avalonia.Controls.Primitives.Popup` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `SetPopupParent` | Method | NonPublicMethods | `SetPopupParent(Control?)` | | `UpdateHostPosition` | Method | NonPublicMethods | `UpdateHostPosition(IPopupHost, Control)` | | `Closing` | Event | NonPublicEvents | `AddClosingEventHandler()`, `RemoveClosingEventHandler()` | | `_ignoreIsOpenChanged` | Field | NonPublicFields | `SetIgnoreIsOpenChanged(bool)`, `GetIgnoreIsOpenChanged()` | --- ### TextBoxReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Input/Utils/TextBoxReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls.Utils` | | 目标类型 | `Avalonia.Controls.TextBox` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `_scrollViewer` | Field | NonPublicFields | `GetScrollViewer()`, `SetScrollViewer()` | | `_presenter` | Field | NonPublicFields | `GetTextPresenter()` | | `ScrollViewer_ScrollChanged` | Method | NonPublicMethods | `HandleScrollChanged()` | | `GetVerticalSpaceBetweenScrollViewerAndPresenter` | Method | NonPublicMethods | `GetVerticalSpaceBetweenScrollViewerAndPresenter()` | | `SnapshotUndoRedo` | Method | NonPublicMethods | `SnapshotUndoRedo()` | | `HandleTextInput` | Method | NonPublicMethods | `HandleTextInput(string?)` | --- ### TextLayoutReflectionExtensions | 文件 | `src/AtomUI.Desktop.Controls/Input/Utils/TextLayoutReflectionExtensions.cs` | |---|---| | 命名空间 | `AtomUI.Desktop.Controls.Utils` | | 目标类型 | `Avalonia.Media.TextFormatting.TextLayout` | | Hook 成员 | 类型 | 成员类型 | 扩展方法 | |---|---|---|---| | `CreateTextParagraphProperties` | Method (static) | NonPublicMethods | `CreateTextParagraphProperties(...)` | --- ## 统计摘要 | 项目 | 扩展类数量 | Hook 成员总数 | |---|---|---| | AtomUI.Core | 10 | 17 | | AtomUI.Desktop.Controls | 9 | 24 | | **合计** | **19** | **41** |