diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml
index 54c0cb0655..b116e4c789 100644
--- a/samples/IntegrationTestApp/MainWindow.axaml
+++ b/samples/IntegrationTestApp/MainWindow.axaml
@@ -120,30 +120,36 @@
-
-
-
- NonOwned
- Owned
- Modal
-
-
- Manual
- CenterScreen
- CenterOwner
-
-
- Normal
- Minimized
- Maximized
- FullScreen
-
-
-
-
-
-
-
+
+
+
+
+ NonOwned
+ Owned
+ Modal
+
+
+ Manual
+ CenterScreen
+ CenterOwner
+
+
+ Normal
+ Minimized
+ Maximized
+ FullScreen
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/IntegrationTestApp/MainWindow.axaml.cs b/samples/IntegrationTestApp/MainWindow.axaml.cs
index 841947673a..3cd5350cce 100644
--- a/samples/IntegrationTestApp/MainWindow.axaml.cs
+++ b/samples/IntegrationTestApp/MainWindow.axaml.cs
@@ -7,9 +7,13 @@ using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Input;
using Avalonia.Interactivity;
+using Avalonia.Media;
using Avalonia.Markup.Xaml;
using Avalonia.VisualTree;
using Microsoft.CodeAnalysis;
+using Avalonia.Controls.Primitives;
+using Avalonia.Threading;
+using Avalonia.Controls.Primitives.PopupPositioning;
namespace IntegrationTestApp
{
@@ -103,6 +107,89 @@ namespace IntegrationTestApp
}
}
+ private void ShowTransparentWindow()
+ {
+ // Show a background window to make sure the color behind the transparent window is
+ // a known color (green).
+ var backgroundWindow = new Window
+ {
+ Title = "Transparent Window Background",
+ Name = "TransparentWindowBackground",
+ Width = 300,
+ Height = 300,
+ Background = Brushes.Green,
+ WindowStartupLocation = WindowStartupLocation.CenterOwner,
+ };
+
+ // This is the transparent window with a red circle.
+ var window = new Window
+ {
+ Title = "Transparent Window",
+ Name = "TransparentWindow",
+ SystemDecorations = SystemDecorations.None,
+ Background = Brushes.Transparent,
+ TransparencyLevelHint = WindowTransparencyLevel.Transparent,
+ WindowStartupLocation = WindowStartupLocation.CenterOwner,
+ Width = 200,
+ Height = 200,
+ Content = new Border
+ {
+ Background = Brushes.Red,
+ CornerRadius = new CornerRadius(100),
+ }
+ };
+
+ window.PointerPressed += (_, _) =>
+ {
+ window.Close();
+ backgroundWindow.Close();
+ };
+
+ backgroundWindow.Show(this);
+ window.Show(backgroundWindow);
+ }
+
+ private void ShowTransparentPopup()
+ {
+ var popup = new Popup
+ {
+ WindowManagerAddShadowHint = false,
+ PlacementMode = PlacementMode.AnchorAndGravity,
+ PlacementAnchor = PopupAnchor.Top,
+ PlacementGravity = PopupGravity.Bottom,
+ Width= 200,
+ Height= 200,
+ Child = new Border
+ {
+ Background = Brushes.Red,
+ CornerRadius = new CornerRadius(100),
+ }
+ };
+
+ // Show a background window to make sure the color behind the transparent window is
+ // a known color (green).
+ var backgroundWindow = new Window
+ {
+ Title = "Transparent Popup Background",
+ Name = "TransparentPopupBackground",
+ Width = 200,
+ Height = 200,
+ Background = Brushes.Green,
+ WindowStartupLocation = WindowStartupLocation.CenterOwner,
+ Content = new Border
+ {
+ Name = "PopupContainer",
+ Child = popup,
+ [AutomationProperties.AccessibilityViewProperty] = AccessibilityView.Content,
+ }
+ };
+
+ backgroundWindow.PointerPressed += (_, _) => backgroundWindow.Close();
+ backgroundWindow.Show(this);
+
+ popup.Open();
+ }
+
private void SendToBack()
{
var lifetime = (ClassicDesktopStyleApplicationLifetime)Application.Current!.ApplicationLifetime!;
@@ -175,6 +262,10 @@ namespace IntegrationTestApp
this.Get("BasicListBox").SelectedIndex = -1;
if (source?.Name == "MenuClickedMenuItemReset")
this.Get("ClickedMenuItem").Text = "None";
+ if (source?.Name == "ShowTransparentWindow")
+ ShowTransparentWindow();
+ if (source?.Name == "ShowTransparentPopup")
+ ShowTransparentPopup();
if (source?.Name == "ShowWindow")
ShowWindow();
if (source?.Name == "SendToBack")
diff --git a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
index 57338a1e08..3ff91139f1 100644
--- a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
+++ b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
@@ -16,4 +16,5 @@
+
diff --git a/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs b/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs
index 4d833cdb1f..3b74ed314b 100644
--- a/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs
+++ b/tests/Avalonia.IntegrationTests.Appium/WindowTests.cs
@@ -1,11 +1,14 @@
using System;
+using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using Avalonia.Controls;
+using Avalonia.Media.Imaging;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Interactions;
+using SixLabors.ImageSharp.PixelFormats;
using Xunit;
using Xunit.Sdk;
@@ -141,7 +144,6 @@ namespace Avalonia.IntegrationTests.Appium
}
}
-
[Theory]
[InlineData(ShowWindowMode.NonOwned)]
[InlineData(ShowWindowMode.Owned)]
@@ -187,6 +189,47 @@ namespace Avalonia.IntegrationTests.Appium
}
}
+ [Fact]
+ public void TransparentWindow()
+ {
+ var showTransparentWindow = _session.FindElementByAccessibilityId("ShowTransparentWindow");
+ showTransparentWindow.Click();
+ Thread.Sleep(1000);
+
+ var window = _session.FindElementByAccessibilityId("TransparentWindow");
+ var screenshot = window.GetScreenshot();
+
+ window.Click();
+
+ var img = SixLabors.ImageSharp.Image.Load(screenshot.AsByteArray);
+ var topLeftColor = img[1, 1];
+ var centerColor = img[img.Width / 2, img.Height / 2];
+
+ Assert.Equal(new Rgba32(0, 128, 0), topLeftColor);
+ Assert.Equal(new Rgba32(255, 0, 0), centerColor);
+ }
+
+ [Fact]
+ public void TransparentPopup()
+ {
+ var showTransparentWindow = _session.FindElementByAccessibilityId("ShowTransparentPopup");
+ showTransparentWindow.Click();
+ Thread.Sleep(1000);
+
+ var window = _session.FindElementByAccessibilityId("TransparentPopupBackground");
+ var container = window.FindElementByAccessibilityId("PopupContainer");
+ var screenshot = container.GetScreenshot();
+
+ window.Click();
+
+ var img = SixLabors.ImageSharp.Image.Load(screenshot.AsByteArray);
+ var topLeftColor = img[1, 1];
+ var centerColor = img[img.Width / 2, img.Height / 2];
+
+ Assert.Equal(new Rgba32(0, 128, 0), topLeftColor);
+ Assert.Equal(new Rgba32(255, 0, 0), centerColor);
+ }
+
public static TheoryData StartupLocationData()
{
var sizes = new Size?[] { null, new Size(400, 300) };