Custom popup placement callback (#15667)

* Add CustomPopupPlacement API

* Add Placement="Custom" support for Flyout, ToolTip and ContextMenu controls as well

* Adjust some API changes

* Add Avalonia.Controls.Primitives.IPopupHost.ConfigurePosition breaking change

* Extract new types into separated files

* Fix build after merge conflict

* Adjust nupkg.xml

* Dispose property subscriptions after popup is closed, avoiding flickering

* Adjust API to be more future proof and add new parameters.

* Add new ContextRequestedEventArgs overload while I am on it
This commit is contained in:
Max Katz
2024-08-19 14:54:44 -07:00
committed by GitHub
parent 3b1c1f4234
commit 1cfa82ca57
20 changed files with 472 additions and 113 deletions
+12
View File
@@ -19,6 +19,12 @@
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Primitives.IPopupHost.ConfigurePosition(Avalonia.Visual,Avalonia.Controls.PlacementMode,Avalonia.Point,Avalonia.Controls.Primitives.PopupPositioning.PopupAnchor,Avalonia.Controls.Primitives.PopupPositioning.PopupGravity,Avalonia.Controls.Primitives.PopupPositioning.PopupPositionerConstraintAdjustment,System.Nullable{Avalonia.Rect})</Target>
<Left>baseline/netstandard2.0/Avalonia.Controls.dll</Left>
<Right>target/netstandard2.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Screens.#ctor(Avalonia.Platform.IScreenImpl)</Target>
@@ -43,6 +49,12 @@
<Left>baseline/netstandard2.0/Avalonia.Controls.dll</Left>
<Right>target/netstandard2.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>M:Avalonia.Controls.Primitives.IPopupHost.ConfigurePosition(Avalonia.Controls.Primitives.PopupPositioning.PopupPositionRequest)</Target>
<Left>baseline/netstandard2.0/Avalonia.Controls.dll</Left>
<Right>target/netstandard2.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0009</DiagnosticId>
<Target>T:Avalonia.Controls.Screens</Target>