Browse Source

Make `PopupHost` a templated control.

Steven Kirk 6 years ago
parent
commit
2697104dbb

+ 2 - 6
src/Avalonia.Controls/Primitives/PopupHost.cs

@@ -1,24 +1,20 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Reactive.Disposables;
-using Avalonia.Controls.Presenters;
 using Avalonia.Controls.Primitives.PopupPositioning;
 using Avalonia.Interactivity;
-using Avalonia.LogicalTree;
 using Avalonia.Media;
 using Avalonia.Threading;
 using Avalonia.VisualTree;
 
 namespace Avalonia.Controls.Primitives
 {
-    public class PopupHost : Decorator, IPopupHost, IInteractive, IManagedPopupPositionerPopup
+    public class PopupHost : ContentControl, IPopupHost, IInteractive, IManagedPopupPositionerPopup
     {
         private readonly OverlayLayer _overlayLayer;
         private PopupPositionerParameters _positionerParameters = new PopupPositionerParameters();
         private ManagedPopupPositioner _positioner;
         private bool _shown;
-        private IControl _content;
 
         public PopupHost(OverlayLayer overlayLayer)
         {
@@ -28,7 +24,7 @@ namespace Avalonia.Controls.Primitives
 
         public void SetContent(IControl control)
         {
-            Child = control;
+            Content = control;
         }
 
         public IVisual VisualRoot => null;

+ 1 - 0
src/Avalonia.Themes.Default/DefaultTheme.xaml

@@ -19,6 +19,7 @@
   <StyleInclude Source="resm:Avalonia.Themes.Default.Menu.xaml?assembly=Avalonia.Themes.Default"/>
   <StyleInclude Source="resm:Avalonia.Themes.Default.ContextMenu.xaml?assembly=Avalonia.Themes.Default"/>
   <StyleInclude Source="resm:Avalonia.Themes.Default.MenuItem.xaml?assembly=Avalonia.Themes.Default"/>
+  <StyleInclude Source="resm:Avalonia.Themes.Default.PopupHost.xaml?assembly=Avalonia.Themes.Default"/>
   <StyleInclude Source="resm:Avalonia.Themes.Default.PopupRoot.xaml?assembly=Avalonia.Themes.Default"/>
   <StyleInclude Source="resm:Avalonia.Themes.Default.ProgressBar.xaml?assembly=Avalonia.Themes.Default"/>
   <StyleInclude Source="resm:Avalonia.Themes.Default.RadioButton.xaml?assembly=Avalonia.Themes.Default"/>

+ 12 - 0
src/Avalonia.Themes.Default/PopupHost.xaml

@@ -0,0 +1,12 @@
+<Style xmlns="https://github.com/avaloniaui" Selector="PopupHost">
+  <Setter Property="Background" Value="{DynamicResource ThemeBackgroundBrush}"/>
+  <Setter Property="Template">
+    <ControlTemplate>
+      <ContentPresenter Name="PART_ContentPresenter"
+                        Background="{TemplateBinding Background}"
+                        ContentTemplate="{TemplateBinding ContentTemplate}"
+                        Content="{TemplateBinding Content}" 
+                        Padding="{TemplateBinding Padding}"/>
+    </ControlTemplate>
+  </Setter>
+</Style>