Index: Classes/NoesisInstance.h
===================================================================
--- Classes/NoesisInstance.h	(revision 16994)
+++ Classes/NoesisInstance.h	(revision 16995)
@@ -140,6 +140,8 @@
 	typedef TSharedPtr<class FNoesisSlateElement, ESPMode::ThreadSafe> FNoesisSlateElementPtr;
 	FNoesisSlateElementPtr NoesisSlateElement;
 
+	TWeakPtr<SWindow> SlateParentWindowPtr;
+
 	UPROPERTY()
 	TObjectPtr<class UWidgetComponent> WidgetComponent;
 
@@ -276,6 +278,9 @@
 	virtual void NativeConstruct() override;
 	virtual void NativeDestruct() override;
 	// End of UUserWidget interface
+
+	void OnOwningWindowActivated();
+	void OnOwningWindowDeactivated();
 };
 
 FDelegateHandle NoesisRegisterOverlayRender();
Index: Private/NoesisInstance.cpp
===================================================================
--- Private/NoesisInstance.cpp	(revision 16994)
+++ Private/NoesisInstance.cpp	(revision 16995)
@@ -1429,6 +1429,31 @@
 	Height = SlateRectSize.Y;
 
 	Update();
+
+	if (MyWidget.IsValid())
+	{
+		auto SlateParentWindow = FSlateApplication::Get().FindWidgetWindow(MyWidget.Pin().ToSharedRef());
+		if (SlateParentWindow.IsValid() && SlateParentWindow != SlateParentWindowPtr)
+		{
+			if (SlateParentWindowPtr.IsValid())
+			{
+				auto OldSlateParentWindow = SlateParentWindowPtr.Pin();
+				OldSlateParentWindow->GetOnWindowActivatedEvent().RemoveAll(this);
+				OldSlateParentWindow->GetOnWindowDeactivatedEvent().RemoveAll(this);
+			}
+
+			SlateParentWindowPtr = SlateParentWindow;
+
+			if (!SlateParentWindow->GetOnWindowActivatedEvent().IsBoundToObject(this))
+			{
+				SlateParentWindow->GetOnWindowActivatedEvent().AddUObject(this, &UNoesisInstance::OnOwningWindowActivated);
+			}
+			if (!SlateParentWindow->GetOnWindowDeactivatedEvent().IsBoundToObject(this))
+			{
+				SlateParentWindow->GetOnWindowDeactivatedEvent().AddUObject(this, &UNoesisInstance::OnOwningWindowDeactivated);
+			}
+		}
+	}
 }
 
 bool GetHitResultAtScreenPositionAndCache(APlayerController* PlayerController, FVector2D ScreenPosition, FHitResult& HitResult)
@@ -2089,11 +2114,43 @@
 
 void UNoesisInstance::NativeDestruct()
 {
+	if (MyWidget.IsValid())
+	{
+		if (SlateParentWindowPtr.IsValid())
+		{
+			auto SlateParentWindow = SlateParentWindowPtr.Pin();
+			SlateParentWindow->GetOnWindowActivatedEvent().RemoveAll(this);
+			SlateParentWindow->GetOnWindowDeactivatedEvent().RemoveAll(this);
+		}
+	}
+
 	TermInstance();
 
 	Super::NativeDestruct();
 }
 
+void UNoesisInstance::OnOwningWindowActivated()
+{
+	if (TakeWidget().Get().HasAnyUserFocusOrFocusedDescendants())
+	{
+		if (XamlView != nullptr)
+		{
+			XamlView->Activate();
+		}
+	}
+}
+
+void UNoesisInstance::OnOwningWindowDeactivated()
+{
+	if (TakeWidget().Get().HasAnyUserFocusOrFocusedDescendants())
+	{
+		if (XamlView != nullptr)
+		{
+			XamlView->Deactivate();
+		}
+	}
+}
+
 // This is a copy of FMobileSceneRenderer::RequiresMultiPass
 static bool RequiresMultiPass(EShaderPlatform ShaderPlatform, uint32 NumMSAASamples)
 {
