diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Primitives/Popup.cs b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Primitives/Popup.cs index 7f88b405643..1be9efe1f0a 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Primitives/Popup.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Primitives/Popup.cs @@ -1517,7 +1517,10 @@ private void CreateWindow(bool asyncCall) // This ensures that a recycled HWND that is moving from one display // to another does not undergo a WM_DPICHANGED event and thus cause a // cascading failure. - if (PopupInitialPlacementHelper.IsPerMonitorDpiScalingActive) + // Also create a new window if the popup animation is set to Fade, + // otherwise reusing the same window will interrupt the fade-out animation, + // causing together with the call to SetWindowPos a brief flicker instead of smooth fade-in. + if (PopupInitialPlacementHelper.IsPerMonitorDpiScalingActive || PopupAnimation is PopupAnimation.Fade) { DestroyWindowImpl(); _positionInfo = null;