Browse Source

Fixes to get it working again after merge

Nikita Tsukanov 8 years ago
parent
commit
abf866cf61

+ 2 - 1
samples/interop/WindowsInteropTest/EmbedToWpfDemo.xaml.cs

@@ -27,11 +27,12 @@ namespace WindowsInteropTest
         {
             InitializeComponent();
             var view = new MainView();
-            Host.Content = view;
+            
             view.AttachedToVisualTree += delegate
             {
                 view.AttachDevTools();
             };
+            Host.Content = view;
             var btn = (Avalonia.Controls.Button) RightBtn.Content;
             btn.Click += delegate
             {

+ 1 - 3
src/Avalonia.Diagnostics/DevTools.xaml.cs

@@ -88,9 +88,7 @@ namespace Avalonia.Diagnostics
         {
             var devToolsWindow = (Window)sender;
             var devTools = (DevTools)devToolsWindow.Content;
-            var window = (Window)devTools.Root;
-
-            s_open.Remove(window);
+            s_open.Remove((TopLevel)devTools.Root);
             _keySubscription.Dispose();
             devToolsWindow.Closed -= DevToolsClosed;
         }

+ 10 - 0
src/Avalonia.Layout/IEmbeddedLayoutRoot.cs

@@ -0,0 +1,10 @@
+namespace Avalonia.Layout
+{
+    /// <summary>
+    /// A special layout root with enforced size for Arrange pass
+    /// </summary>
+    public interface IEmbeddedLayoutRoot : ILayoutRoot
+    {
+        Size AllocatedSize { get; }
+    }
+}

+ 4 - 6
src/Avalonia.Layout/LayoutManager.cs

@@ -186,14 +186,12 @@ namespace Avalonia.Layout
 
             if (!control.IsArrangeValid && control.IsAttachedToVisualTree)
             {
-                if (control is ILayoutRoot root)
-                {
-                    root.Arrange(new Rect(root.ClientSize));
-                }
+                if (control is IEmbeddedLayoutRoot embeddedRoot)
+                    control.Arrange(new Rect(embeddedRoot.AllocatedSize));
+                else if (control is ILayoutRoot root)
+                    control.Arrange(new Rect(root.DesiredSize));
                 else
-                {
                     control.Arrange(control.PreviousArrange.Value);
-                }
             }
         }
 

+ 3 - 1
src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs

@@ -33,7 +33,7 @@ namespace Avalonia.Win32.Interop.Wpf
         public EmbeddableControlRoot ControlRoot { get; }
         internal ImageSource ImageSource { get; set; }
 
-        public class CustomControlRoot : EmbeddableControlRoot
+        public class CustomControlRoot : EmbeddableControlRoot, IEmbeddedLayoutRoot
         {
             public CustomControlRoot(WpfTopLevelImpl impl) : base(impl)
             {
@@ -52,6 +52,8 @@ namespace Avalonia.Win32.Interop.Wpf
                 LayoutManager.Instance.ExecuteLayoutPass();
                 Renderer?.Resized(clientSize);
             }
+
+            public Size AllocatedSize => ClientSize;
         }
 
         public WpfTopLevelImpl()