Browse Source
* refactor: Replace IsPopup with Enable*Layer properties on VisualLayerManager - Remove IsPopup from VisualLayerManager, add granular Enable*Layer properties: EnableAdornerLayer (default true), EnableOverlayLayer (default false), EnablePopupOverlayLayer (internal, default false), EnableTextSelectorLayer (default false) - Add PART_VisualLayerManager template part to TopLevel with protected property - Window and EmbeddableControlRoot override OnApplyTemplate to enable overlay, popup overlay, and text selector layers - OverlayLayer is now wrapped in a Panel with a dedicated AdornerLayer sibling - AdornerLayer.GetAdornerLayer checks for OverlayLayer's dedicated AdornerLayer - Update all 8 XAML templates (both themes) to name PART_VisualLayerManager and remove IsPopup="True" from PopupRoot/OverlayPopupHost Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add XML doc to VisualLayerManager * Also search for AdornerLayer from TopLevel --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Julien Lebosquain <julien@lebosquain.net>pull/20933/head
committed by
GitHub
16 changed files with 178 additions and 20 deletions
@ -0,0 +1,37 @@ |
|||||
|
using Avalonia.Controls.Primitives; |
||||
|
using Avalonia.UnitTests; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.Controls.UnitTests.Primitives |
||||
|
{ |
||||
|
public class VisualLayerManagerTests : ScopedTestBase |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void GetAdornerLayer_Returns_Dedicated_AdornerLayer_For_Controls_Inside_OverlayLayer() |
||||
|
{ |
||||
|
var button = new Button(); |
||||
|
var vlm = new VisualLayerManager { EnableOverlayLayer = true, Child = button }; |
||||
|
var root = new TestRoot { Child = vlm }; |
||||
|
|
||||
|
root.Measure(new Size(100, 100)); |
||||
|
root.Arrange(new Rect(0, 0, 100, 100)); |
||||
|
|
||||
|
var overlayLayer = vlm.OverlayLayer; |
||||
|
Assert.NotNull(overlayLayer); |
||||
|
|
||||
|
var overlayChild = new Border(); |
||||
|
overlayLayer.Children.Add(overlayChild); |
||||
|
|
||||
|
// The adorner layer for a control inside the OverlayLayer
|
||||
|
// should be the dedicated one, not the main VLM adorner layer.
|
||||
|
var overlayAdornerLayer = AdornerLayer.GetAdornerLayer(overlayChild); |
||||
|
Assert.NotNull(overlayAdornerLayer); |
||||
|
Assert.Same(overlayLayer.AdornerLayer, overlayAdornerLayer); |
||||
|
|
||||
|
// The main VLM adorner layer should be different.
|
||||
|
var mainAdornerLayer = AdornerLayer.GetAdornerLayer(button); |
||||
|
Assert.NotNull(mainAdornerLayer); |
||||
|
Assert.NotSame(overlayAdornerLayer, mainAdornerLayer); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue