Browse Source

implent popup routing events to parent toplevel.

pull/11502/head
Dan Walmsley 3 years ago
parent
commit
7aa531530b
  1. 11
      src/Avalonia.Base/Input/PointerEventArgs.cs
  2. 18
      src/Avalonia.Themes.Fluent/Controls/PopupRoot.xaml

11
src/Avalonia.Base/Input/PointerEventArgs.cs

@ -70,7 +70,16 @@ namespace Avalonia.Input
if (relativeTo == null)
return pt;
return pt * _rootVisual.TransformToVisual(relativeTo) ?? default;
if (!ReferenceEquals(_rootVisual, relativeTo.VisualRoot))
{
var screenPt = _rootVisual.PointToScreen(pt);
return relativeTo.PointToClient(screenPt);
}
else
{
return pt * _rootVisual.TransformToVisual(relativeTo) ?? default;
}
}
/// <summary>

18
src/Avalonia.Themes.Fluent/Controls/PopupRoot.xaml

@ -13,15 +13,15 @@
<LayoutTransformControl LayoutTransform="{TemplateBinding Transform}">
<Panel>
<Border Name="PART_TransparencyFallback" IsHitTestVisible="False" />
<Border Background="Red">
<VisualLayerManager IsPopup="True">
<ContentPresenter Name="PART_ContentPresenter"
Background="{TemplateBinding Background}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
Padding="{TemplateBinding Padding}" />
</VisualLayerManager>
</Border>
<Border Background="Transparent">
<VisualLayerManager IsPopup="True">
<ContentPresenter Name="PART_ContentPresenter"
Background="{TemplateBinding Background}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
Padding="{TemplateBinding Padding}" />
</VisualLayerManager>
</Border>
</Panel>
</LayoutTransformControl>
</ControlTemplate>

Loading…
Cancel
Save