Browse Source

[TEMP] Call measure directly

Nikita Tsukanov 8 years ago
parent
commit
df13ab2ecb

+ 6 - 6
src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs

@@ -22,6 +22,8 @@ namespace Avalonia.Controls.Embedding
         [CanBeNull]
         public new IEmbeddableWindowImpl PlatformImpl => (IEmbeddableWindowImpl) base.PlatformImpl;
 
+        protected bool EnforceClientSize { get; set; } = true;
+
         public void Prepare()
         {
             EnsureInitialized();
@@ -38,14 +40,12 @@ namespace Avalonia.Controls.Embedding
                 init.EndInit();
             }
         }
-
-        public Size MeasureBase(Size availableSize) => base.MeasureOverride(availableSize);
-
+        
         protected override Size MeasureOverride(Size availableSize)
         {
-            var cs = PlatformImpl?.ClientSize ?? default(Size);
-            base.MeasureOverride(cs);
-            return cs;
+            if (EnforceClientSize)
+                availableSize = PlatformImpl?.ClientSize ?? default(Size);
+            return base.MeasureOverride(availableSize);
         }
 
         private readonly NameScope _nameScope = new NameScope();

+ 14 - 2
src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs

@@ -35,10 +35,16 @@ namespace Avalonia.Win32.Interop.Wpf
 
         public class CustomControlRoot : EmbeddableControlRoot
         {
+            public CustomControlRoot()
+            {
+                EnforceClientSize = false;
+                
+            }
+
             public override void InvalidateMeasure()
             {
-                base.InvalidateMeasure();
                 ((FrameworkElement)PlatformImpl)?.InvalidateMeasure();
+                base.InvalidateMeasure();
             }
         }
 
@@ -95,10 +101,16 @@ namespace Avalonia.Win32.Interop.Wpf
             return base.ArrangeOverride(finalSize);
         }
 
-        protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize) => ControlRoot.MeasureBase(availableSize.ToAvaloniaSize()).ToWpfSize();
+        protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize)
+        {
+            ControlRoot.Measure(availableSize.ToAvaloniaSize());
+            return ControlRoot.DesiredSize.ToWpfSize();
+        }
 
         protected override void OnRender(DrawingContext drawingContext)
         {
+            if(ActualHeight == 0 || ActualWidth == 0)
+                return;
             _ttl.Paint?.Invoke(new Rect(0, 0, ActualWidth, ActualHeight));
             if (ImageSource != null)
                 drawingContext.DrawImage(ImageSource, new System.Windows.Rect(0, 0, ActualWidth, ActualHeight));